Java - 当String不是文字而是对象时?

the*_*der 3 java language-agnostic primitive object literals

然而,在我脑中又一次挫折之后,我又在重新审视Java(参见我的个人资料).这里也提出了类似的问题,但我没有提出这个问题.

我一直都明白这String是什么.即,官方API中明确表达的An对象.但是我一直在阅读这个数据类型的Java指南.

对我来说这个概念很清楚.原语是文字.即,它们无法实例化,并按以下方式分配值:

primtype prim =?;
Run Code Online (Sandbox Code Playgroud)

关于Java的官方指南似乎(正确地)将String标识为文字,但忽略了标准被视为文字的标准.鉴于java.lang.String它确实是一个java.lang.Obect(通过扩展),一个String存在Object与一个literal谎言之间的根本区别仅在于如何将变量分配给值 - 仅仅是赋值(文字)与构造(对象)相对应?如果您能帮忙澄清一下,请随时向我们提供更深入的资源?

我还想知道文字的标准是否在不同语言中是一致的(如果这意味着"弱类型"语言只使用文字?)

Jam*_*unt 8

我认为你混淆了原始和文字.

类型可以是基本类型,也可以是对象类型(即从Object继承).

文字只是表示代码中"字面上"的值的表示.这可以表示原始类型或对象类型.

所以'字面型'并没有真正意义.字符串永远不是文字,它始终是一个对象.文字只是在代码中表示字符串的一种可能方式.

其他语言的治疗方法差异很大.例如,在C#中,所有东西都派生自Object,包括Java中"原始"的类型.

  • 如果您意识到其含义与字符串的值(或初始化)有关,而不是字符串的类型,那么说'这个字符串是文字'是完全有效的.这就像说"这个字符串是一个空字符串",但"空字符串"不是一个类型. (3认同)

Doo*_*nob 6

它只被称为文字,因为你可以这样做:

"this is a string"
Run Code Online (Sandbox Code Playgroud)

而不是必须做这样的事情:

new String(new char[] {'t', 'h', 'i', 's' ...})
Run Code Online (Sandbox Code Playgroud)

例如,文字5,或9.3f,或'd'.因此,String(构造的"this")将属于该类别.

非文字的一个例子是new Object();.如果您String使用new关键字创建一个,那么它不是文字.

但是,一旦String完成,它根本不重要.他们仍然是相同的字符串,不管你让喜欢"this"new String(new char[]{'t','h','i','s'}).