3

在我的大脑又一次挫折之后,我再次重新审视 Java(请参阅我的个人资料)。这里已经提出了类似的问题,但我不想以这种方式提出这个问题。

我一直都明白什么是a String。即,在官方API中明确表示的 An 对象。但是,我一直在阅读有关数据类型Java 指南。

对我来说,这个概念很清楚。基元是文字。即,它们不能被实例化并且被赋值如下:

primtype prim =?;

Java 的官方指南似乎都(正确地)将字符串识别为文字,但忽略了将哪些标准视为文字。鉴于java.lang.String它确实是一个(通过扩展),与存在相对应的存在java.lang.Obect之间的这种潜在差异是否仅在于如何为变量分配值 - 仅通过与构造(对象)相对的赋值(文字)?如果可以帮助澄清,请随时向我指出更深入的资源?StringObjectliteral

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

4

5 回答 5

8

我认为您混淆了原始和文字。

类型可以是原始类型,也可以是 Object 类型(即从 Object 继承)。

字面量仅表示代码中“字面”值的表示。这可以表示原始类型或对象类型。

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

其他语言的处理方式差异很大。例如,在 C# 中,一切都派生自 Object,包括 Java 中的“原始”类型。

于 2013-04-09T12:16:28.970 回答
6

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

"this is a string"

而不必做这样的事情:

new String(new char[] {'t', 'h', 'i', 's' ...})

例如,文字是 、59.3f、 或'd'。因此,a String(constructed like "this") 将属于该类别。

非文字的一个例子是new Object();. 如果您String使用new关键字制作 a ,则它不是文字。

但是,一旦String制作完成,就完全没有关系了。它们仍然是相同的字符串,无论您将其设为 like"this"还是new String(new char[]{'t','h','i','s'}).

于 2013-04-09T12:14:09.883 回答
3

您不应混淆不同的、非排他性的概念。“literal”是一个词汇/句法概念,用于在编程语言中表达某些常量项。Java 中的许多文字描述了原始值,然而,在没有原始的不同语言中,相同的语法可用于描述不同质量的常量项。

不同的文字描述了更复杂的项目,例如字符串或数组,甚至是函数(参见即将到来的 lambda-syntax - lambda 表达式被广泛视为“函数文字”)。

于 2013-04-09T12:23:22.787 回答
2

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

于 2013-04-09T12:13:44.133 回答
0

这只是选择如何区分它的问题。根据定义,它扩展了 Object,它是一个 Object,但另一方面,java 允许您简单地使用

String str = "this is a string"

可能是为了简单。现在由你决定你想怎么称呼它,直到你现在在下面发生什么

于 2013-04-09T12:17:32.630 回答