Imparare ad usare gli oggetti

di il
11 risposte

Imparare ad usare gli oggetti

Salve ragazzi purtroppo ho perso una lezione dove il prof faceva vedere come si usano gli oggetti e visto che non voglio rimanere in dietro mi sono letto qualcosa sul mio libro e ho tentato di fare un esercizio ma non ci sono riuscito , vi invio questo sorgente è molto semplice proprio per imparare bene grazie a tutti

public class saluto{
    void cordiale(String );
    
     public static void main(String []args){
        String ciao="salve a tutti";
        cordiale(ciao);
     }
     
     public void cordiale(String x)
     { System.out.println(" "+x);
}
devo solo prendere una variabile e passarla ad una funzione dell'oggetto per farla stampare

11 Risposte

  • Re: Imparare ad usare gli oggetti

    Ciao!
    Non so se hai imparato a programmare in c++, cmq la riga
    "void cordiale (String );"
    la devi eliminare, perchè in java non devi dichiarare il metodo prima di implementarlo

    per il resto, il programma è corretto a patto che aggiungi la keyword static
    al metodo "cordiale", nel modo seguente:
    public static void cordiale(String x)
    e il programma diventa:
    
    public class saluto{
        
         public static void main(String []args){
            String ciao="salve a tutti";
            cordiale(ciao);
         }
         
         public static void cordiale(String x)
         {
             System.out.println(" "+x);
         }
    }
    
    Perche non funziona se non metti la parola chiave static?
    perchè un metodo senza "static" è un metodo dotato del riferimento al parametro implicito (ovvero del this).
    Tu non hai riferimenti all'oggetto impliciti in questo caso..
    Quindi non è possibile..
    Se non sai di cosa parlo, ti consiglio di vedere nel libro il capitolo che parla di classi, oggetti e il riferimento al parametro implicito (this)

    Spero di esserti stato d'aiuto ciao
  • Re: Imparare ad usare gli oggetti

    Ah dimenticavo..in Java tutte le "funzioni" sono dette metodi (appartengono tutti ad una classe)
    e il metodo "cordiale" non appartiene ad un oggetto, appunto perchè è static
  • Re: Imparare ad usare gli oggetti

    Grazie , si ho dato anche l'esame su c ,(c++ lo facevo a scuola ) grazie molto chiara la spiegazione , ma è possibile fare un confronto con un == ?? ci sto provando ma il compilatore dice che sto confrontando tipi diversi , anche se non è vero , apro un nuovo trhed e chiedo ?
  • Re: Imparare ad usare gli oggetti

    Ciao, con l'operatore == puoi confrontare i tipi primitivi (ad esempio due interi, due caratteri, due booleani, ecc..) oppure i puntatori degli oggetti (sostanzialmente puoi controllare se due variabili puntano allo stesso oggetto). In alternativa se vuoi controllare l'uguaglianza di due oggetti, ad esempio due stringhe, devi usare dei metodi dell'oggetto stesso (tutti gli oggetti possiedono un metodo chiamato equals, bisogna vedere se è correttamente implementato). Per confrontare due stringhe ad esempio puoi usare il metodo equals o uno dei suoi derivati. Es:
    stringa1.equals(stringa2);
    Tornando alla tua domanda: cosa provi a confrontare? Cioè qual è la riga che ti da l'errore di compilazione?
  • Re: Imparare ad usare gli oggetti

    Adesso non ho la riga di codice"incriminata" sotto mano , non sapevo che potevo confrontare solo primitivi è un esercizio del mio prof che ci voleva far vedere che i risultati di equals e dell'== possono essere differenti, e nello specifico ci ha detto di creare 2 istanze di un oggetto e provare questi confronti
  • Re: Imparare ad usare gli oggetti

    Ah ecco penso di averti già risposto prima allora. In realtà con l'operatore di confronto == puoi confrontare due variabili di qualsiasi tipo.
    Ad esempio se hai:
    
    int a = 5, b=6;
    a==b; //true
    
    Il confronto che viene eseguito è: 5 == 6 ?

    Altrimenti se hai
    
    String x = new String("ciao"), y= new String("ciao");
    x==y; //false
    x.equals(y); //true
    
    Con x==y vengono confrontati i puntatori e, dato che si tratta di oggetti diversi, restituisce false. Con equals viene confrontato il contenuto (qualche programmatore avrà implementato il metodo dicendo COSA confrontare, ovvero i caratteri, e COME farlo) per cui restituisce true.


    Sent from my iPhone using Tapatalk - now Free
  • Re: Imparare ad usare gli oggetti

    Della forse si è confuso (sicuramente sa quello che dice, ma nell'esempio avrà fatto un errore di stampa)

    se hai:

    String a= "ciao";
    String b= "ciao";

    se hai:
    a==b //false, perchè le variabili a e b si riferiscono a due oggetti diversi
    // esistono due oggetti, uno puntato da a e uno puntato da b

    se hai:
    a.equals(b) // true, perchè i due oggetti sono uguali.

    se hai:
    String a= "cane";
    a=b;

    a==b // true, perchè i due riferimenti a oggetto (ovvero a e b) puntano allo stesso oggetto.
    // adesso esiste un solo oggetto, che viene puntato sia da a che da b.

    Quindi, morale della storia, in java le variabili contengono solo i riferimenti agli oggetti, non gli oggetti stessi (un po come nei puntatori col c++). Le uniche variabli che in java contengono effettivamente il valore,sono le variabili di tipo di data primitivo, ovvero:

    byte
    short
    int
    long
    float
    double
    boolean
    char

    Tutti gli altri tipi di variabili (come anche String) conterranno i riferimenti all oggetto (ovvero la loro posizione in memoria) non gli oggetti!

    L'operatore == controlla se i tipi di dato primitivo, sono uguali, oppure se i riferimenti all oggetto puntano allo stesso oggetto (si dice pure che controlla se sono in aliasing)

    Per controllare se due oggetti sono uguali, si usa il metodo equals.
    Una volta che definisci le tue classi Java, è utile definire il metodo equals per il tuo oggetto, pero questo lo impari un po piu in la
    Spero di esserti stato d aiuto se qualcosa non è chiara, chiedi pure
  • Re: Imparare ad usare gli oggetti

    Forse ho visto male io prima.. o forse Della si è accorto della svista e ha modificato XD in ogni caso, adesso il post di della è corretto (non per correggere lui perchè sicuramente è un esperto programmatore )
    Spero di non aver confuso nessuno XD
  • Re: Imparare ad usare gli oggetti

    In effetti avevo fatto degli errori che poi ho corretto, ti ringrazio comunque per essertene accorto e aver fugato i dubbi

    Un unico appunto: se hai il seguente codice
    
    String a = "ciao";
    String b = "ciao";
    
    allora facendo a == b si ottiene true! Questo perché per una politica di risparmio delle risorse creando due stringhe uguali direttamente (ovvero senza passare dal new String("...")) viene riutilizzato lo stesso oggetto.

    PS: non sono così esperto e tantomeno infallibile purtroppo, ma ti ringrazio per la fiducia
  • Re: Imparare ad usare gli oggetti

    Come volevasi dimostrare, Della is the best!
    Grazie non lo sapevo!
    Comq broke31, quest'ultimo appunto di Della è diciamo un eccezione, (da quel che ho capito) occhio a non confonderti,meglio se prendi d'esempio quello scritto prima da Della o da me ciao ciao
  • Re: Imparare ad usare gli oggetti

    Si esatto è un'eccezione alla regola dovuta al fatto che le stringhe sono oggetti molto usati e quindi hanno previsto quest'ottimizzazione: di fatto usi lo stesso oggetto per cui il puntatore non può che essere lo stesso.
    In generale comunque vale la regola già citata da giuse secondo cui l'operatore di uguaglianza == confronta il contenuto di due variabili. Se queste variabili sono di tipo primitivo (int, char, ecc..) allora esse contengono direttamente un valore (che sia un numero, un carattere o altro), per cui con l'== confronti direttamente i valori; se, invece, la variabile è di tipo complesso (ovvero un qualsiasi oggetto) allora essa non contiene il valore ma solo il puntatore all'oggetto, quindi con == confronti i puntatori (ovvero se due variabili puntano allo stesso oggetto).
Devi accedere o registrarti per scrivere nel forum
11 risposte