Sto seguendo questo corso di Giava: http://www.learnjavaonline.org/en/Conditionals
Come esercizio devo far sì che il seguente codice restituisca i 3 valori booleani b1, b2 e b3 come true; per farlo posso solo cambiare le variabili a, b, c, d:
public class Main {
public static void main(String[] args) {
String a = new String("Wow");
String b = "Wow";
String c = a;
String d = c;
boolean b1 = a == b;
boolean b2 = b.equals(b + "!");
boolean b3 = !c.equals(a);
if (b1 && b2 && b3) {
System.out.println("Success!");
}
}
}
Mi ci sono scervellato e l'ho trovato impossibile, al massimo potevo rendere true b1 oppure b2 e b3, ma non tutti insieme. Guardo la soluzione e usa codice mai spiegato prima, mi date una mano? Da che ho capito dribbla il problema forzando true, ossia con un override fa sì che i valori booleani siano true a prescindere che sia davvero così, Giusto?
public class Main {
public static void main(String[] args) {
Main a = new Main() {
@Override
public boolean equals(Object obj) {
return true;
}
};
Main b = a;
Main c = new Main() {
@Override
public boolean equals(Object obj) {
return false;
}
};
boolean b1 = a == b;
boolean b2 = b.equals(b + "!");
boolean b3 = !c.equals(a);
if (b1 && b2 && b3) {
System.out.println("Success!");
}
}
}
sostanzialmente quello che fa è fare un overriding del metodo equals, in modo che restituisca sempre true indipendentemente dall'operando. + l'unico modo per far si che b sia uguale a se stesso + !
tuttavia, non avevo mai visto l'uso di new Main(), quindi non capisco bene come diavolo funziona. probabilmente è una funzione di lib.
Citazione di: sgnablo il 20 Agosto 2017, 19:10:46
sostanzialmente quello che fa è fare un overriding del metodo equals, in modo che restituisca sempre true indipendentemente dall'operando. + l'unico modo per far si che b sia uguale a se stesso + !
tuttavia, non avevo mai visto l'uso di new Main(), quindi non capisco bene come diavolo funziona. probabilmente è una funzione di lib.
Ok, per ora sono tornato a studiare C++, lo trovo più adatto al mio cervello. Secondo te con un po' più basi di C++ riuscirò a capire meglio Java?
ni. son due linguaggi diversi. per dirne una, java non ha l'ereditarietà multipla (devi fare un workaround usando le interface), mentre c++ ce l'ha nativa. tuttavia, nella OOP io mi son trovato meglio col Java (anche se ho usato il c++ solo a livello accademico per esami universitari. se dovessi rimettermici ora, probabilmente riuscirei meglio), soprattutto usando framework come spring + maven