然而,在我脑中又一次挫折之后,我又在重新审视Java(请参阅我的个人资料)。这里也提出了类似的问题,但我没有提出这个问题。
我一直都明白String
是什么。即,官方API中明确表达的An对象。但是我一直在阅读有关数据类型的this Java指南。
对我而言,这个概念很清楚。原语是文字。即,它们无法实例化,并按以下方式分配值:
primtype prim =?;
关于Java的官方指南似乎(正确地)将String标识为文字,但忽略了标准被视为文字的标准。鉴于java.lang.String
它确实是java.lang.Obect
(通过扩展名),String
与Object
之间存在的literal
之间的潜在差异仅仅是{{1}}如何为变量赋值 - 仅仅通过赋值(literal)作为构造(对象)?如果你能帮忙澄清一下,请随时给我指出更深入的资源?
我还想知道文字的标准是否在不同语言中是一致的(如果这意味着“弱类型”语言只使用文字?)
答案 0 :(得分:9)
我认为你混淆了原始和文字。
类型可以是基本类型,也可以是对象类型(即从Object继承)。
文字只是表示代码中“字面上”的值的表示。这可以表示原始类型或对象类型。
因此'字面类型'并不真正有意义。字符串永远不是文字,它始终是一个对象。文字只是在代码中表示字符串的一种可能方式。
其他语言的治疗方法差异很大。例如,在C#中,所有东西都派生自Object,包括Java中“原始”的类型。
答案 1 :(得分:6)
它只被称为文字,因为你可以这样做:
"this is a string"
而不是做这样的事情:
new String(new char[] {'t', 'h', 'i', 's' ...})
例如,文字是5
,9.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"
可能是为了简单起见。现在,你想要称之为什么,直到你现在正在发生的事情