2013-04-09 131 views
3

再次,我在脑中又一次挫折之后再次访问Java(请参阅我的个人资料)。这里也提出了类似的问题,但我没有想过要提出这个问题。Java - 当一个字符串不是一个字面而是​​一个对象?

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

对我来说这个概念很清楚。基元是文字。也就是说,它们不能被实例化和被指定如下值:

primtype prim =?; 

关于Java的官方导游似乎都(正确地)识别字符串作为文字,但把标准是什么被视为一个文字。鉴于java.lang.String它确实是一个java.lang.Obect(通过扩展),这个String是否与literal之间的根本区别仅在于如何为变量赋值 - 仅仅通过赋值(字面)赋予构造(目的)?如果你能帮助澄清,请随时向我指出更深入的资源?

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

回答

8

我觉得你很混乱的原始和文字。

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

字面意味着代码中的字面意思表示。这可以表示一个基元或一个对象类型。

所以'字面类型'并没有什么意义。一个字符串永远不是文字,它总是一个对象。文字只是表示代码中字符串的一种可能方式。

其他语言的治疗差异很大。例如在C#中,所有东西都从Object派生,包括Java中的'primitive'类型。

+0

在多个地方String有时被称为文字。我非常满意String是一个对象,我只是想清除一些小混乱。 – thejartender 2013-04-09 12:31:42

+2

说“这个字符串字面”是完全有效的,我认为,只要你意识到的意思是相对于字符串的值(或初始化),而不是字符串类型。这就像说'这个字符串是一个空字符串',但'空字符串'不是一个类型。 – 2013-04-09 12:36:37

2

字符串是AA的对象,而不是文字,因为它可以用字符数组构造!

+0

不是很有帮助。一个字符串可以有一个文字值。一个文字可以是一个字符串。 – EJP 2013-04-09 22:40:26

5

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

"this is a string" 

而不必做这样的事情的:

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

文本是,例如,5,或9.3f ,或'd'。因此,String(构建为"this")将属于该类别。

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

但是,一旦制作String,它根本就没有关系。他们仍然是相同的字符串,不管你是否使它像"this"new String(new char[]{'t','h','i','s'})

+0

这就是我的想法!谢谢! – thejartender 2013-04-09 12:18:51

0

这仅仅是你如何分辨它选择的问题。 通过认定中,因为它扩展对象是一个对象,但另一方面的Java允许您只需使用

String str = "this is a string" 

可能是简单的事情。现在是高达你,你怎么称呼它,直到你现在发生的事情下面

2

你不应该混淆不同的,非排他的概念是什么。 “literal”是用于在编程语言中表达某些常量项目的词汇/语法概念。 Java中的许多文字描述原始值,然而,在不含原语的不同语言中,可以使用相同的语法来描述不同质量的常量项目。

不同文字描述更复杂的项,例如串或阵列,或甚至功能(参见即将λ-语法 - lambda表达式被广泛认为是“函数文本”)。

相关问题