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

时间:2013-04-09 12:11:43

标签: java object language-agnostic literals primitive

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

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

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

primtype prim =?;

关于Java的官方指南似乎(正确地)将String标识为文字,但忽略了标准被视为文字的标准。鉴于java.lang.String它确实是java.lang.Obect(通过扩展名),StringObject之间存在的literal之间的潜在差异仅仅是{{1}}如何为变量赋值 - 仅仅通过赋值(literal)作为构造(对象)?如果你能帮忙澄清一下,请随时给我指出更深入的资源?

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

5 个答案:

答案 0 :(得分:9)

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

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

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

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

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

答案 1 :(得分:6)

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

"this is a string"

而不是做这样的事情:

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

例如,文字是59.3f'd'。因此,String(构造为"this")属于该类别。

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

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

答案 2 :(得分:3)

你不应该混淆不同的,非排他性的概念。 “literal”是用于在编程语言中表达某些常量项的词汇/句法概念。 Java中的许多文字都描述了原始值,但是,在没有基元的不同语言中,可以使用相同的语法来描述不同质量的常量项。

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

这仅仅是你如何区分它的选择问题。 通过定义,因为它扩展了Object它是一个Object,但另一方面java允许你只使用

String str = "this is a string"

可能是为了简单起见。现在,你想要称之为什么,直到你现在正在发生的事情