115 votes

« Cette » peut-on jamais nulle en Java ?

Vu cette ligne dans une méthode de classe, et ma première réaction a été de ridiculiser le développeur qui a écrit il... Mais ensuite, j’ai pensé que dois-je m’assurer que j’étais premier à droite.

Cette ligne évaluera jamais false ?

93voto

Colin Hebert Points 40084

Non, elle peut pas. Si vous utilisez this, alors vous êtes dans l'instance afin this n'est pas nulle.

JL dit :

Lorsqu'il est utilisé comme primaire d'expression, le mot-clé this désigne une valeur qui est une référence à l'objet pour lequel la méthode d'instance a été invoquée (§15.12), ou à l'objet en cours de construction.

Si vous avez appelé une méthode d'un objet, l'objet existe ou vous auriez un NullPointerException avant (ou c'est une méthode statique, mais alors, vous ne pouvez pas utiliser this ).


Ressources :

63voto

bragboy Points 13615

C’est comme vous demander « Suis-je vivant ? » `` ne peut jamais être nul

9voto

sactiw Points 7717

Non, jamais, le mot " il " représente le courant vivant de l'instance (objet) de la classe dans le cadre de la classe, avec lequel vous pouvez accéder à tous ses champs et ses membres (y compris les constructeurs) et celles que l'on voit de sa classe parente.

Et, plus intéressant, essayez de le définir:

this = null;

Pensez à ce sujet? Comment peut-il être possible, n'est-ce pas comme couper la branche sur laquelle vous êtes assis sur. Depuis le mot-clé 'ce' est disponible dans le cadre de la classe, donc dès que vous dire que c' = null; n'importe où à l'intérieur de la classe, alors vous êtes essentiellement en demandant JVM pour libérer de la mémoire affectée à cet objet dans le milieu d'une opération qui JVM ne peut tout simplement pas accepter qu'il se doit de retourner en toute sécurité après la fin de l'opération.

En outre, la tentative de ce = null; entraînera une erreur de compilation. La raison est assez simple, un mot-clé en Java (ou de n'importe quelle langue) ne peut jamais être affecté d'une valeur c'est à dire d'un mot-clé ne peut jamais être la lvalue d'un assigmnet opération.

D'autres exemples, vous ne pouvez pas dire:

true = new Boolean(true);
true = false;

7voto

Si vous compilez avec ou antérieure, puis *l’extérieur* peut être `` . Ou au moins il utilisé pour...

3voto

Claudiu Points 58398

N ° Pour appeler une méthode d’une instance d’une classe, l’instance doit exister. L’instance est implicitement passée comme paramètre à la méthode référencée par . Si a été `` puis il n’y aurait aucune instance pour appeler une méthode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X