2013-04-09 134 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表達式被廣泛認爲是「函數文本」)。

相關問題