Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]oggetti e assegnamento

    Ciao allora ho la seguente classe(che di per sè non ha molto,ma è a livello didattico):

    codice:
    class Vehicle{
    private int velocità=100;
    private int gradi=90;
    private String nomeproprietario;
    private static int veicolosuccessivo=10;
    private int numerodiogniveicolo=5;
    Vehicle veicolo=null;
      Vehicle(){
    }
    Vehicle(String nomeproprietario){
        this.nomeproprietario=nomeproprietario;
        
    }
    public int getnumerodiogniveicolo(){
        return numerodiogniveicolo;
    }
    public int getvelocità(){
        return velocità;
    }
    public int getgradi(){
        return gradi;
    }
    public int getveicolosuccessivo(){
        return veicolosuccessivo;
    }
    public String getnomeproprietario(){
        return nomeproprietario;
    }
    public void  setveicolosuccessivo(int nuovoveicolo){
        this.veicolosuccessivo=nuovoveicolo;
    }
    public  void setnomeproprietario(String nuovonome){
        this.nomeproprietario=nuovonome;
    }
    @Override
    public String toString(){
        String s="il nome del proprietario è: "+nomeproprietario;
        if(veicolo!=null){
            s+=" la macchina va a "+velocità+"\n"+veicolo.toString();
        }
        return s;
    }
    }
    poi da main:

    codice:
    class TestVeicolo{
    public static void main(String[] args){
    Vehicle v=new Vehicle();
    Vehicle v1=new Vehicle("elena");
    Vehicle v2=new Vehicle("fabio");
    v2.veicolo=v1;
    v1.setnomeproprietario("davide");
    System.out.println(v1.getnomeproprietario());
    System.out.println(v);
    System.out.println(v1);
    System.out.println(v2);
    }
    }
    Adesso il compilatore mi stampa:
    il nome del proprietario è: null
    il nome del proprietario è: davide
    il nome del proprietario è: fabio la macchina va a 100
    il nome del proprietario è: davide

    Perchè??
    non dovrebbe stamparmi :
    davide
    il nome del proprietario è: null
    il nome del proprietario è: fabio la macchina va a 100
    il nome del proprietario è: fabio

    Poi perchè su v1.getnomeproprietario() il compilatore invoca direttamente il meto toString?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    Adesso il compilatore mi stampa:
    il nome del proprietario è: null
    il nome del proprietario è: davide
    il nome del proprietario è: fabio la macchina va a 100
    il nome del proprietario è: davide

    Perchè??
    non dovrebbe stamparmi :
    davide
    il nome del proprietario è: null
    il nome del proprietario è: fabio la macchina va a 100
    il nome del proprietario è: fabio

    Poi perchè su v1.getnomeproprietario() il compilatore invoca direttamente il meto toString?
    Il tuo codice, esattamente come si vede postato qui stampa:

    codice:
    davide
    il nome del proprietario è: null
    il nome del proprietario è: davide
    il nome del proprietario è: fabio la macchina va a 100
    il nome del proprietario è: davide

    Il primo System.out.println(v1.getnomeproprietario());
    stampa "davide" e questo è corretto, dato che hai fatto prima v1.setnomeproprietario("davide");

    Il secondo System.out.println(v);
    stampa "il nome del proprietario è: null" e questo è ovvio perché non è stato settato un nome

    Il terzo System.out.println(v1);
    stampa "il nome del proprietario è: davide" e questo è anche comprensibile ... è sempre quel v1 ma ora attraverso il toString().

    Il quarto System.out.println(v2);
    stampa "il nome del proprietario è: fabio la macchina va a 100
    il nome del proprietario è: davide"
    perché v2 ha il riferimento a v1 e il toString() aggiunge altro se veicolo non null.


    Ricorda che se passi a print/println un generico oggetto (non già String o uno dei primitivi), viene invocata la versione print(Object) ed è questa che invoca toString() sull'oggetto!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    Ciao grazie per la risposta...scusa se ti stresso la vita ...sto andando in crisi sugli assegnamenti ; se ho:

    codice:
    Vehicle v=new Vehicle();
    Vehicle v1=new Vehicle("elena");
    Vehicle v2=new Vehicle("fabio");
    v.veicolo=v1;
    System.out.println(v);
    
    System.out.println(v2);
    Perchè il metodo println mi stampa da terminale "null la macchina va ..." ?non dovrebbe essere "elena la macchina va..."?Un ogetto che contine null è immodificabile? Poi il programma mi stampa il valore di v1 perchè passo a println un generico oggetto,e quindi viene invocto automaticamente il metodo toString della mia classe giusto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    Perchè il metodo println mi stampa da terminale "null la macchina va ..." ?non dovrebbe essere "elena la macchina va..."?
    System.out.println(v2); stampa

    il nome del proprietario è: fabio la macchina va a 100
    il nome del proprietario è: davide


    Quote Originariamente inviata da el92 Visualizza il messaggio
    Un ogetto che contine null è immodificabile?
    Detto così, mi spiace, non vuol dire nulla.

    Quote Originariamente inviata da el92 Visualizza il messaggio
    Poi il programma mi stampa il valore di v1 perchè passo a println un generico oggetto,e quindi viene invocto automaticamente il metodo toString della mia classe giusto?
    out di System è un java.io.PrintStream. PrintStream ha svariati print/println la documentazione es. di println(Object x) dice:

    This method calls at first String.valueOf(x) to get the printed object's string value

    Il valueOf(Object obj) semplicemente fa: se obj è null, restituisce "null" (stringa letterale), altrimenti restituisce obj.toString()
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.