Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对字符串文本调用方法(Java)_Java_String_Object - Fatal编程技术网

对字符串文本调用方法(Java)

对字符串文本调用方法(Java),java,string,object,Java,String,Object,我知道字符串文字是对象。 据 创建对象时,也会创建对该对象的引用在Java中不能直接访问对象,只能通过此对象引用。此对象引用已分配类型。当将对象引用作为参数传递给方法时,我们需要这种类型 但是,当我们使用文本访问字符串方法时,我们是否违反了这一点 例如: System.out.println("Literal".toUpperCase()); String x = "Literal"; System.out.println(x.toUpperCase()); 这不是直接访问对象吗?而不是

我知道字符串文字是对象。 据

创建对象时,也会创建对该对象的引用在Java中不能直接访问对象,只能通过此对象引用。此对象引用已分配类型。当将对象引用作为参数传递给方法时,我们需要这种类型

但是,当我们使用文本访问字符串方法时,我们是否违反了这一点

例如:

System.out.println("Literal".toUpperCase());
String x = "Literal"; 
System.out.println(x.toUpperCase());
这不是直接访问对象吗?而不是通过引用访问对象

例如:

System.out.println("Literal".toUpperCase());
String x = "Literal"; 
System.out.println(x.toUpperCase());
这不是直接访问对象吗?而不是通过引用访问对象

不,你还在用一个推荐人。作为字符串文字的表达式的值是字符串引用。它仍然不是您可以直接访问的对象


在您的示例中,
x
的值仍然是一个引用,除了变量
x
之外,您的两个代码段是等效的。您可以看到
“Literal”
,就像
新字符串(“Literal”)
一样
String
并不是一个真正的魔法类,它只是使用一个特定的系统来创建实例。它的工作原理非常类似于在方法
someMethod().doSomething()的返回值上调用某个对象。您没有一个专用的名称(我指的是变量)来指向实例,但您仍然有一个由该方法返回的实例引用。我发现“在Java中无法直接访问该对象,只能通过该对象引用。”这是一个不敏感且令人困惑的评论(您的问题清楚地表明了该评论是如何令人困惑的)对象引用用于标识对象实例。如果无法识别某个内容,则无法访问该内容。没有比这个更直接的方法了。只是一个小提示:使用文本创建的字符串来自内部字符串缓存(字符串内部)。与总是创建新的未缓存值的
新字符串(…)
相反。@ErwinBolwidt我猜它指的是支持对象的内存,您不能将其作为值访问。但是你是对的,使用术语“object”是有误导性的。所以string-literal是对一个string对象的引用,该对象保存的数据就是string-literal?@omaewa:我想说“它保存的字符序列与string-literal中存在的字符序列相同”。这不像是涉及到额外的间接层次——它只是对具有正确内容的字符串的引用。有趣!这将是java中字符串的一个特殊特性,对吗?没那么特殊。还有类文字,null文字也是一个计算为对象引用的文字。@omaewa引用在源代码中不一定可见