[英]Initializing a String in Java
當我們使用以下方法初始化字符串時有什么區別:
- java.lang.String
- 字符串(僅限)
為什么我們要寫完整的 package 的名稱?
沒有區別。 java.lang
package 在所有 java 程序中隱式導入。
如果沒有定義自定義“字符串”class,則沒有區別。
但是,如果您定義了自己的“字符串”class。 然后你需要額外的 java.lang 來識別正確的字符串 class。
為什么我們要寫完整的 package 的名稱?
在這種情況下,您不需要這樣做。
正如@Asaph 所說, java.lang
被隱式導入到每個 class 中。 這意味着您的代碼可以通過簡單的 class 名稱來引用String
和其他類,例如Boolean
、 System
和NullPointerException
。
您需要通過其完全限定名稱( java.lang.String
)引用String
的唯一情況是:
如果您在某些反射 API 中將 class 名稱作為字符串提供,或者
如果您愚蠢地編寫了自己的 class ,其簡單名稱為String
; 例如com.example.stupid.String
,並且您已將該版本的String
顯式導入到其他一些 class 中。
最佳實踐是通過簡單名稱來引用java.lang
中的類,而不是在其他包中使用相同的簡單名稱定義您自己的類。
在一般情況下,這兩個 forms 的含義完全相同,並且會給您完全相同的編譯代碼:
// 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;
...
}
沒有不同
我們編寫 package 以將其與您項目中類似名稱的 class(如果有)區分開來。 例如,如果您的項目還有一個名為String
的 class , java 將不知道您要使用哪個字符串 class - 您的或 java 的內置字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.