2011-08-11 60 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! :) –