随机发现以下代码在Java中有效。 Eclipse不会显示错误,并且在使用programm时它不会出现RuntimeException
:
File f1 = new File("");
File f2 = new File(f1 + "");
为什么这样做? f1
绝对不是String,为什么我们可以将两个不同的对象与+
运算符组合在一起? File是Object的 direct 子类,我们无法将String
与File
对象合并,因为它们主要是不同的对象。 File
还有一个uri
构造函数,但为什么这应该是一个uri? File
和uri
处于技术视图中,来自java绝对不同的对象(同样来自对象的直接子类,并且彼此之间没有上下文),为什么这会起作用呢? / p>
答案 0 :(得分:7)
由于String
转换,这是可能的。如果运算符为+
,其中一个操作数为String
,而另一个操作数不是,则String
转换发生在非String
的操作数上。通过调用String
将其转换为toString()
。
JLS, Section 5.1.11,涵盖了这个:
任何类型都可以通过字符串转换转换为String类型。
...
现在只需要考虑参考值:
如果引用为null,则将其转换为字符串“null”(四个ASCII字符n,u,l,l)。
否则,转换的执行就好像通过调用没有参数的引用对象的toString方法一样;但是如果调用toString方法的结果为null,则使用字符串“null”。