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.
スニャブロ ufficiale del forum
pulsantoni pulsantosi per greasemonkey: http://bubs.altervista.org/index.php?topic=4.msg183#msg183
script greasemonkey anti-ads: http://bubs.altervista.org/index.php?topic=6.msg2581#msg2581

I miei vaneggi pseudodisegnosi: http://sgnafp.deviantart.com/

"Speed never killed anyone, suddenly becoming stationary, that's what gets you."

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
スニャブロ ufficiale del forum
pulsantoni pulsantosi per greasemonkey: http://bubs.altervista.org/index.php?topic=4.msg183#msg183
script greasemonkey anti-ads: http://bubs.altervista.org/index.php?topic=6.msg2581#msg2581

I miei vaneggi pseudodisegnosi: http://sgnafp.deviantart.com/

"Speed never killed anyone, suddenly becoming stationary, that's what gets you."