Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813

    String sottoclasse di Object oppure oggetto speciale?

    ciao a tutti
    ho una domanda teoria su Java. Se String è una sottoclasse di Object, (ma anche tutte le stringhe "ciao pippo" sono anch'essi interpretati alla fine come new String("ciao pippo")), come mai esiste il metodo toString che restituisce un String, visto che ancora "non dovrebbe esistere"?
    Com'è gestita dal compilatore questa storia qua?
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: String sottoclasse di Object oppure oggetto speciale?

    Originariamente inviato da Hysoka come mai esiste il metodo toString che restituisce un String, visto che ancora "non dovrebbe esistere"?
    Che intendi??
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    toString è un metodo di Object, non solo di String, quindi viene ereditato da tutte le sue sottoclassi. Nel momento in cui chiami il metodo toString() di qualunque classe derivata da Object, avrai come ritorno la rappresentazione dell'oggetto in formato stringa, in questa versione:

    getClass().getName() + '@' + Integer.toHexString(hashCode()),

    a meno che tu non faccia un Override del metodo che ritorni un'altra stringa.

    ciao

  4. #4

    Re: String sottoclasse di Object oppure oggetto speciale?

    Com'è gestita dal compilatore questa storia qua?
    Semplice ogni Lieterals ("pippo","pluto", "etc..") al momento della compilazione vengono trasformati in new String("pippo"), new String("pluto") ....
    Ecco perchè nel oggetto String che estende Object e definito il metodo toString, il metodo wait che sono tutti ereditati da object.
    Spero di aver risposto alla tua domanda

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: String sottoclasse di Object oppure oggetto speciale?

    Originariamente inviato da Hysoka
    ciao a tutti
    ho una domanda teoria su Java. Se String è una sottoclasse di Object, (ma anche tutte le stringhe "ciao pippo" sono anch'essi interpretati alla fine come new String("ciao pippo")), come mai esiste il metodo toString che restituisce un String, visto che ancora "non dovrebbe esistere"?
    Com'è gestita dal compilatore questa storia qua?
    non ho capito cosa intendi, in ogni caso l'istruzione

    codice:
    TipoOggetto ogg = new TipoOggetto();
    di fatto ha creato un oggetto e se tu hai fatto l'override del metodo toString() dentro TipoOggetto (che ad esempio ritorna "ciao mondo") l'istruzione

    codice:
    System.out.println("Scrivo " +  (new TipoOggetto()).toString());
    ha come output

    Scrivo ciao mondo

    cioè di fatto usare

    (new TipoOggetto()).toString();
    assegnarlo ad una variabile e fare il toString sulla variabile non cambia.

    Come ti facevano notare, la classe String (che deriva da Object) fa l'override del toString().
    Per comodità si fa in modo che alla sequenza

    "ciao mondo"

    la jvm per te istanzi uno stringbuffer in cui fa l'append dei caratteri da te specificati e ti ritorni il risultato finale, ma questo lo fa in automatico, per evitare al programmatore la noia di farlo.

    Ora quale è il senso della tua domanda (visto che tutti ti abbiamo risposto in un modo che spiega come funziona il toString() ma non so se che intende la tua domanda)

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315

    Re: String sottoclasse di Object oppure oggetto speciale?

    Credo che la problematica sollevata sia un po' più articolata.

    Originariamente inviato da Hysoka
    come mai [nella classe Object, ndr] esiste il metodo toString che restituisce un String, visto che ancora "non dovrebbe esistere"?
    E il succo sta qui: non è vero che la classe String non esiste ancora.
    O meglio: non si potrebbe compilare la classe Object senza avere anche la classe String (e tante altre classi: Class, CloneNotSupportedException, Integer, IllegalArgumentException, InterruptedException, ecc).

    E qui nasce il tuo dubbio, se non ho capito male: come faccio a compilare Object, se mi serve String? Risposta: compilo String. Ma come faccio a compilare String (che estende implicitamente da Object), senza avere Object (che sta aspettando String)?

    Se ho capito bene il tuo dubbio, la risposta è (non così) semplice: il compilatore si accorge che c'è questo "riferimento circolare" (Object richieste String, che a sua volta richiede Object) e lo gestisce... ovvero, ad un certo punto, considera che una delle due esista e va avanti. Alla fine, infatti, si tratta solo di inserire nel bytecode un "riferimento" ad un'altra classe. Una volta che si sa che A necessita di B, si inserisce un riferimento a B nel codice di A... poco importa che B ancora non esista... verrà eventualmente creata dopo dal compilatore.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.