Referência this

Boa tarde amigos, estou com uma dúvida no seguinte código:

[code]public class MyDate2 {

private int day;
private int month;
private int year;

public MyDate2(int day, int month, int year) {
	
	this.day = day;
	this.month = month;
	this.year = year;
}

public MyDate2(MyDate2 date) {
	
	this.day = date.day;
	this.month = date.month;
	this.year = date.year;
}

public MyDate2 addDays(int moreDays) {
	MyDate2 newDate = new MyDate2(this); //-->O que esse this faz. 
	newDate.day = newDate.day + moreDays;
	return newDate;
}

public String toString() {
	
	return "" + day + "-" + month + "-" + year;
}

}[/code]

Li em um lugar que ele pega a referência atual do objeto, mas ainda não entendi por completo.

Obrigado

Cara, o uso do this dentro da classe é opcional.
O Java trabalha com refeências para objetos, não com os objetos em si. Śão na verdade endereços de memória onde os objetos estão realmetne alocados (como ponteiros em C, C++, etc).
O this é uma referência para o objeto atual, para o qual você está escrevendo o código naquele momento. Assim, esta era a maneira de acessar algum argumento da classe dentro dos métodos. Mas hoje em dia o uso do this é opcional. No exemplo que você postou, o this poderia ser omitido que funcionaria sem problema.

Abraço!

Teste simples:

public class Test {
    private String testString = "string declarada na classe";

    public void printTest() {
        String testString = "string declarada no método";

        System.out.println( this.testString );
        System.out.println( testString );
    }
    public static void main( String[] args ) {
        new Test().printTest();
    }
}

Apesar de ambas as variáveis terem o mesmo nome, “testString”, ao usar “this” está referindo-se à variável da classe, sem o “this” está referindo-se à variável declarada no método.

Ah, agora que eu vi o ponto do código que você perguntou! Foi mal!

Ali, você está usando a segunda versão do construtor da classe, que recebe um objeto da mesma classe MyDate2 e cria um novo objeto com extamente os mesmo atributos, isso é, uma cópia!

Se vc chama

MyDate2 newDate = new MyDate2(this); 

o que está fazendo é passando o objeto atual para o construtor de cópia

public MyDate2(MyDate2 date) {
 		
 		this.day = date.day;
 		this.month = date.month;
 		this.year = date.year;
 	}

Abraço!

Neste caso o this não poderia ser omitido pois é um argumento para se construir um outro objeto.

O que aconteceu naquele momento é mais ou menos assim: “Construa um outro objeto MyDate2 onde a data que ele conterá será igual mim.(no caso o this)”.

Ou seja, o objeto que está executando aquela linha de código(this) será o mesmo objeto que será enviado para o construtor que recebe um MyDate2.

Imagine uma classe pessoa e outra classe carro. Um carro tem um dono. Imagine que na classe pessoa haja um método criar carro, passando um dono como parâmetro.

Se vc fizer: Carro c = new Carro(“Zé mané”), o dono do carro é o zé mané.

Se vc fizer: Carro c = new Carro(this.getNome()), o dono do carro é a pessoa que estiver sendo representada pelo objeto no momento(this). Para um objeto com o nome de Joana, o dono vai ser a joana, para um objeto com nome de Pedro, o dono vai ser o pedro…

Espero ter ajudado.

Agora sim entendi, muito obrigado a todos

Abraços