【发布时间】:2019-09-24 18:23:19
【问题描述】:
我知道字符串文字是对象。 根据
https://en.wikibooks.org/wiki/Java_Programming/Classes,_Objects_and_Types
创建对象时,也会创建对该对象的引用。 在 Java 中不能直接访问该对象,只能通过此对象引用。 该对象引用具有分配给它的类型。在将对象引用作为参数传递给方法时,我们需要这种类型。
但是当我们让字面量访问 String 方法时,我们是否违反了这一点?
例如:
System.out.println("Literal".toUpperCase());
这不是直接访问对象吗?而不是通过引用访问对象。
例如:
String x = "Literal";
System.out.println(x.toUpperCase());
【问题讨论】:
-
你可以看到
"Literal",就像new String("Literal")一样。String并不是真正的魔法类,它只是使用特定系统创建实例 -
它的工作方式与在方法
someMethod().doSomething()的返回值上调用某些东西时非常相似。您没有专用的 name(我的意思是变量)来指向实例,但您仍然有一个由方法返回的实例的 reference。 -
我发现“无法在Java中直接访问该对象,只能通过此对象引用。”一个无意义且令人困惑的评论(您的问题清楚地表明了该评论是如何令人困惑的)对象引用是标识对象实例的内容。如果你不能识别它,你就不能访问它。没有比这更“直接”的方法了。
-
请注意:使用文字创建的字符串来自内部字符串缓存(字符串实习)。与
new String(...)不同,new String(...)总是会创建一个全新的未缓存值。 -
@ErwinBolwidt 我猜它是指支持对象的内存,您不能将其作为值访问。但你是对的,使用“对象”这个词是有误导性的。