2011-08-11 124 views
1

的String有什麼不同的時候,我們通過使用初始化字符串:初始化在Java中

  1. java.lang.String中
  2. 字符串(只)

爲什麼我們寫完整包的名字?

+1

你沒有使用'String'或'的java.lang。字符串'來初始化任何東西。你只需使用這些標記**來命名**類型。 –

回答

0

沒有區別

我們寫的包從一個名稱相似的類區分開來,如果有的話,您的項目。例如,如果您的項目也有一個名爲String的類,java將不知道要使用哪個String類 - 您的或Java的內置類。

+0

謝謝Raghuram!您的帖子非常有用。 :) –

2

沒有區別。隱式地導入所有java程序中的java.lang包。

+0

謝謝亞薩! :) –

1

如果沒有定義自定義的「字符串」類,則沒有區別。

但是,如果你定義了你自己的「String」類。然後你需要額外的java.lang來識別正確的String類。

+0

嗯,我明白了!謝謝Gapton! :) –

1

爲什麼我們要寫完整包的名字?

在這種情況下,你應該不需要。

作爲@Asaph狀態,java.lang隱式地將導入到每個類中。這意味着您的代碼可以通過簡單的類名引用String和其他類,如BooleanSystemNullPointerException

唯一的情況下,你會需要通過其完全限定域名(java.lang.String)是指String是:

  • 如果你是在一些反射API提供的類名作爲字符串,或

  • 如果你已經愚蠢地寫了一個你自己的類,其簡單的名字是String;例如com.example.stupid.String,並且您已明確導入版本的String爲其他類。

最佳做法是通過其簡單的名稱來指代班java.lang,並不能與其他套餐一樣簡單的名稱定義自己的類。


在一般情況下,這兩種形式的意思是完全一樣的東西,並給你一模一樣的編譯代碼:

// version 1 
package com.example.bar; 
import com.example.foo.Foo; 
public class Bar { 
    private Foo myFool; 
    ... 
} 

// version 2 
package com.example.bar; 
public class Bar { 
    private com.example.foo.Foo myFool; 
    ... 
} 
+0

大聲笑。 Gr8發佈。非常感謝Stephen C! :) –