在一个类方法中看到这一行,我的第一反应是嘲笑编写它的开发人员..但是,我认为我应该确保我是对的.
public void dataViewActivated(DataViewEvent e) {
if (this != null)
// Do some work
}
Run Code Online (Sandbox Code Playgroud)
那条线路会被评估为假吗?
Col*_*ert 87
不,它不能.如果你正在使用this,那么你在实例中所以this不是null.
JLS说:
当用作主表达式时,关键字this表示一个值,该值是对调用实例方法的对象(第15.12节)的引用,或者是对正在构造的对象的引用.
如果你从一个对象调用一个方法,那么该对象就存在了,或者你有一个NullPointerExceptionbefore(或者它是一个静态方法,但是你不能this在其中使用).
资源:
bra*_*boy 63
这就像在问自己"我还活着吗?" this永远不会为空
从来没有,关键字"this"本身表示该类范围内该类的当前活动实例(对象),您可以使用该实例访问其所有字段和成员(包括构造函数)及其父类的可见实例.
而且,更有趣的是,尝试设置它:
this = null;
Run Code Online (Sandbox Code Playgroud)
想一想吗?怎么可能,就像削减你所坐的分支一样.由于关键字"this"在类的范围内可用,因此只要你说this = null; 在类中的任何地方,你基本上都要求JVM在某些操作过程中释放分配给该对象的内存,JVM不允许这样做,因为它需要在完成该操作后安全返回.
此外,尝试this = null;将导致编译器错误.原因很简单,Java(或任何语言)中的关键字永远不会被赋值,即关键字永远不能是赋值操作的左值.
其他例子,你不能说:
true = new Boolean(true);
true = false;
Run Code Online (Sandbox Code Playgroud)
如果您使用-target 1.3或更早编译,那么外部 this可能是null.或者至少过去......