package learning;
public class This_keyword {
int x;
int y;
This_keyword(int x,int y){
x = x;
y = y;
System.out.print("Value of 1st :" +x);
System.out.print("Value of 2nd :" +y);
}
public static void main(String args[]){
This_keyword sample = new This_keyword(4,5);
}
}
Cela devrait imprimer 0,0 puisque je n'ai pas utilisé ce mot-clé, mais il est encore l'impression 4,5 qui sont passés en tant que constructeur paramétré.Le compilateur ne trouve pas d'ambiguïté parmi la variable d'instance et les paramètres passés lors de l'initialisation du constructeur?
maintenant un coup d'oeil au second code,
package learning;
public class This_keyword {
int x;
int y;
This_keyword(int x,int y){
x = x;
y = y;
}
void display(){
System.out.print("Value of 1st :" +x);
System.out.print("Value of 2nd :" +y);
}
public static void main(String args[]){
This_keyword sample = new This_keyword(4,5);
sample.display();
}
}
Maintenant, il est prinitng 0,0 qui était attendu et vrai que ce mot-clé pas a été mentionné complier avait une ambiguïté la résolution même nom parmi variable d'instance et les paramètres . Pourquoi le compilateur était capable d'imprimer les valeurs dans le premier cas ??? même s'il y a une ambiguïté là-bas aussi !!
Pertinent: https://stackoverflow.com/questions/42117386/why-are-my-fields-initialized-to-null-or-to-the-default-value-of-zero-when-ive –
Dans les constructeurs utilisent la forme 'this.x = x'. –
imprime 'this.x' et vous obtenez' 0'. – CoronA