传递最终对象(下面代码中的字符串)时,它从匿名内部类打印时显示为空。但是,当最终值类型或直接最终字符串传入时,其值正确显示。 final
在匿名内部类的上下文中是什么意思,为什么对象传递null?传入匿名内部类时的空对象
public class WeirdInners
{
public class InnerThing
{
public InnerThing()
{
print();
}
public void print(){
}
}
public WeirdInners()
{
final String aString = "argh!".toString();
final String bString = "argh!";
System.out.println(aString);
System.out.println(bString);
InnerThing inner =new InnerThing(){
public void print()
{
System.out.println("inner"+aString); // When called from constructor, this value is null.
System.out.println("inner"+bString); // This value is correctly printed.
}
};
inner.print();
}
public static void main(String[] args)
{
WeirdInners test1 = new WeirdInners();
}
}
这是非常奇怪的行为,我,因为期望是字符串为对象,为什么叫toString()
变化的东西呢?
其他信息:此行为仅在Java 1.4中观察到,而不在Java 5中。有关解决方法的任何建议?在现有字符串上不调用toString()
是公平的,但由于这只是一个例子,如果我在非String对象上执行它,它会有真实世界的影响。
你在Java 1.4下看到了什么结果?我正在使用Java 6,并且我得到了(可能不会很好地格式化,并且没有预览注释): argh! 啊! innerargh! innerargh! innerargh! innerargh! 这不是对你有任何帮助,但EOL Notification for Java 1.4于2006年12月宣布,EOSL for Java 1.4是本周五一年前发布的。Java 5的EOL Notification是在2008年4月,它在本周五触及了EOSL。任何你可以升级到Java 6的机会? http://java.sun.com/products/archive/eol.policy.html – shoover 2009-10-28 21:09:37
您将看到预期的输出。使用“argh!”时1.4行为是innernull。toString();. – 2009-10-28 23:11:52