Java, exercício de análise

assunto: arraylist, equals
pergunta: qual o output do seguinte:

package recursopa2;

import java.util.ArrayList;
import java.util.List;

class Inteiro {

    private int i;

    public Inteiro(int i) {
        this.i = i;
    }

    public void setVal(int i) {
        this.i = i;
    }

    public int getVal() {
        return i;
    }

    public String toString() {
        return "" + i;
    }

    //extra
    public boolean equals(Object ob) {
        if (ob == null) {
            return false;
        }
        if (getClass() != ob.getClass()) {
            return false;
        }
        //se chego aqui já posso comparar o i

        //return (i==ob.i); 
        //dá erro, porque ob não conhece i, então
        
        Inteiro a = (Inteiro) ob;
        //fazemos um cast
        return (i == a.i);
    }
    //e desta forma o System.out.println(i.equals(j));
    //dá true
}

class main {

    public static void main(String[] args) {
        List<Inteiro> listaInteiros = new ArrayList<>();
        //criado um arraylist de listaInteiros

        Inteiro i = new Inteiro(10);
        Inteiro j = new Inteiro(10);

        System.out.println(i == j);
        //saida: falso
        //porque estão em referências diferentes

        System.out.println(i.equals(j));
        //saida: falso
        //o equals faz a comparação que nos programamos lá dentro
        //por exemplo comparar conteudos
        //mas o equals não foi definido, e não dá erro porque
        //está a usar a do object, class Inteiro extends object
        //e a equals no object considera dois objetos iguais
        //se tiverem o mesmo endereço

        listaInteiros.add(i);
        listaInteiros.add(j);

        j = i;
        //j refere o i

        j.setVal(2);
        //o primeiro elemento do array list fica 2

        System.out.println(i);
        //saida: 2

        System.out.println(j);
        //saida: 2

        System.out.println(listaInteiros.get(0));
        //saida: 2

        System.out.println(listaInteiros.get(1));
        //saida: 10
    }
}

Tags : ,

0 thoughts on “Java, exercício de análise”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.