Domanda Programma Java

Stato
Discussione chiusa ad ulteriori risposte.

utensilenato1

Utente Bronze
14 Maggio 2014
13
9
1
45
Codice:
Codice:
import java.util.*;
public class Equazione {
    private String eq;
    private Scanner sc;
    public Equazione(){
        System.out.println("Digitare l'equazione:");
        sc=new Scanner(System.in);
        eq=sc.nextLine();
       
       
}
    public Equazione(Equazione a){
        eq=a.geteq();
    }
    public String geteq(){
        return eq;
    }
    public void ottienicoefficente(){
        for (int i=0;i<eq.length();i++){
            String m=eq.substring(i, i+1);
             if (m=="x"){
                 System.out.println("1");
             }
        }
    }
Salve ragazzi , ho un problema con questo codice , non so perchè in "ottienicoefficente" quando faccio m==x restituisce sempre false ... m in input è uguale a "xxxxxxxxxx", vi prego aiutatemi !!!
 
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals(java.lang.Object)

In java il confronto tra due oggetti (si, due stringhe sono solamente due oggetti e vengono trattati come tali) si fa con metodi particolari, in questo caso, equals().
Se fai m=="x" non stai facendo un confronto fra stringhe, ma un confronto tra oggetti, in quel caso la JVM va a vedere altro e non il contenuto.
Non specifico cosa è quel generico "altro" perchè avresti dovuto studiare il modello di gestione della memoria della jvm e sapresti quindi dunque cosa accade quando crei un oggetto e via dicendo (e non è nozionismo è una cosa importante a lungo andare).

Detto ciò, potrebbe pure capitare che se fai un confronto tra stringhe usando == Java lo interpreta come confronto tra stringhe, ma è una POSSIBILE ottimizzazione fatta dalla JVM (più che ottimizzazione direi quasi correzione), sulla quale non si può comunque fare affidamento.

Riassumendo, usa equals e abituati a cercare sulle api ufficiali della oracle dove potrai ottenere tutte le informazioni che desideri.
 
  • Mi piace
Reazioni: Scanetatore
Allora diciamo che in Java esistono 8 tipi primitivi (byte, short, int, long, float, double ,char , boolean).
Una variabile in Java è :
1)di tipo primitivo.
(oppure)
2)di tipo riferimento a oggetto.

Sostanzialmente se devi controllare se due interi sono uguali (essendo int un tipo di dato primitivo) usi "=="
Altrimenti se devi controllare l uguaglianza di variabili il cui tipo non è primitivo, usa il metodo equals.

Piccolo curiosità, se utilizzi "==" per confrontare riferimenti a oggetti (come hai fatto tu nel programma che hai postato sopra) controllerai se le due variabili puntano allo stesso oggetto (ovvero se c'è aliasing).

Se non sono stato chiaro, fammi sapere! Ciao :)
 
Il Java il confronto tra Strings avviene tramite il metodo Equals (Boolean), appartenente alla classe Objects.

Java:
Object.equals(m, "x");
// Oppure
m.equals("x");
 
Stato
Discussione chiusa ad ulteriori risposte.