Java—当字符串不是文字而是对象时?

Java—当字符串不是文字而是对象时?,java,object,language-agnostic,literals,primitive,Java,Object,Language Agnostic,Literals,Primitive,在我头脑中又一次受挫之后,我再次访问Java(参见我的个人资料)。这里也有人问过类似的问题,但没有一个是我想提出的问题 我一直明白什么是字符串。i、 e,官方文件中明确表示的对象。然而,我一直在阅读关于数据类型的Java指南 对我来说,这个概念很清楚。原语是文字。i、 e,它们不能实例化,并按如下方式分配值: primtype prim =?; 关于Java的官方指南似乎都(正确地)将字符串标识为文本,但忽略了将哪些标准视为文本。既然java.lang.String确实是java.lang.O

在我头脑中又一次受挫之后,我再次访问Java(参见我的个人资料)。这里也有人问过类似的问题,但没有一个是我想提出的问题

我一直明白什么是
字符串。i、 e,官方文件中明确表示的对象。然而,我一直在阅读关于数据类型的Java指南

对我来说,这个概念很清楚。原语是文字。i、 e,它们不能实例化,并按如下方式分配值:

primtype prim =?;
关于Java的官方指南似乎都(正确地)将字符串标识为文本,但忽略了将哪些标准视为文本。既然
java.lang.String
确实是
java.lang.Obect
(通过扩展),那么
String
作为
对象与
文字
之间的根本区别是否仅仅在于变量的赋值方式——仅仅是通过赋值(文字)与构造方式(对象)?如果可以帮助澄清,请随时向我指出更深入的资源


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

字符串是一个对象,而不是文字,因为它可以使用字符数组来构造!

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

"this is a string"
不必做这样的事情:

new String(new char[] {'t', 'h', 'i', 's' ...})
例如,文本是
5
,或
9.3f
,或
'd'
。因此
字符串(构造类似于
“this”
)将属于该类别

非文本的一个例子是
newobject();
。如果使用
new
关键字创建
String
,则它不是文本


但是,一旦创建了
字符串
,这就无关紧要了。它们仍然是相同的字符串,不管您是像
“this”
还是
新字符串(新字符[]{not','h','i','s})
我认为您混淆了原语和文字

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

字面意思是代码中“字面”值的表示。这可以表示原语或对象类型

所以“文字类型”并没有真正的意义。字符串从来不是文字,它总是一个对象。文字只是在代码中表示字符串的一种可能方式


其他语言中的处理方式差别很大。例如,在C语言中,一切都源自对象,包括Java中的“原始”类型。

这只是选择如何区分它的问题。 通过定义,当它扩展对象时,它是一个对象,但另一方面,java允许您简单地使用它

String str = "this is a string"

可能是为了简单起见。现在你想怎么称呼它取决于你自己,直到你知道下面发生了什么,你不应该混淆不同的、非排他性的概念是一个词汇/语法概念,用于在编程语言中表示某些常量项。Java中的许多文字描述原语值,但在没有原语的不同语言中,相同的语法可用于描述不同质量的常量项


不同的文字描述更复杂的项目,如字符串或数组,甚至函数(请参阅即将发布的lambda语法-lambda表达式被广泛视为“函数文字”).

这就是我的想法!谢谢!在很多地方,字符串有时被称为文本。我很满意字符串是一个对象,只是想澄清一些小的混淆。如果你意识到其含义与值(或初始化)有关,那么说“此字符串是一个文本”是完全正确的字符串的类型,而不是字符串的类型。这就像说“此字符串是空字符串”,但“空字符串”不是类型。这不是很有帮助。字符串可以有文本值。文本可以是字符串。