问题

在一个类方法中看到这一行,我的第一反应是嘲笑编写它的开发人员..但是,我认为我应该确保我是对的。

public void dataViewActivated(DataViewEvent e) {
    if (this != null)
        // Do some work
}

那条线路会被评估为假吗?


#1 热门回答(81 赞)

不,它不能。如果你正在使用this,那么你在实例中sothis不为空。

JLS说:

当用作主表达式时,关键字this表示一个值,该值是对调用实例方法的对象(第15.12节)的引用,或者是对正在构造的对象的引用。

如果你从一个对象调用一个方法,那么该对象就存在了,或者你将有一个(或者它是一个静态方法但是,你不能在其中使用this)。
资源: - JLS - 这个关键字


#2 热门回答(60 赞)

这就像问自己"我还活着吗?"this永远不会为空


#3 热门回答(8 赞)

绝不,关键字'this'本身表示该类范围内该类的当前活动实例(对象),你可以使用该实例访问其所有字段和成员(包括构造函数)及其父级的可见实例类。

而且,更有趣的是,尝试设置它:

this = null;

想一想吗?怎么可能,就像削减你所坐的分支一样。因为关键字"this"在类的范围内可用,因此只要你说这个= null;在类中的任何地方,你基本上都要求JVM在某些操作过程中释放分配给该对象的内存,JVM不允许这样做,因为它需要在完成该操作后安全返回。

而且,尝试this = null;会导致编译错误。原因很简单,Java(或任何语言)中的关键字永远不会被赋值,即关键字永远不能是赋值操作的左值。

其他例子,你不能说:

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

原文链接