2

使用默认值初始化变量时:

有什么区别:

private static String thing = null;

private static String thing = "";

我不明白哪个更好,为什么,以及处理其他数据类型的最佳方法是什么。

private static int number = 0;
private static double number  = 0;
private static char thing = 0;

对不起,我很难学习新语言。

4

4 回答 4

3

除了初始化String为空字符串

private static String thing = "";

其他赋值是不必要的:Java 会将原始类型的所有成员变量设置为其默认值,并将所有引用类型(包括java.String)设置为null.

将 a 初始化String为 a或空字符串的决定取决于您: "nothing" 和 "empty string" *null之间存在区别,因此您必须决定要哪个。


* "nothing" 和 "empty string" 之间的区别源于观察到对null字符串不可能进行任何操作 - 例如,它的长度是未定义的,并且你不能迭代它的字符。相反,空字符串的长度是明确定义的(零),您可以迭代其字符(这是一个空迭代)。

于 2013-10-31T01:49:13.853 回答
2

在 Java 中,null 和 empty 不是一回事。

来自 suns java 教程

声明字段时并不总是需要赋值。已声明但未初始化的字段将由编译器设置为合理的默认值。一般来说,此默认值将为零或空,具体取决于数据类型。然而,依赖这样的默认值通常被认为是糟糕的编程风格。

下表总结了上述数据类型的默认值。

Data Type Default Value (for fields)
byte      0
short     0
int       0
long      0L
float     0.0f
double    0.0d
char      '\u0000'
String (or any object) null
boolean   false

局部变量略有不同;编译器永远不会为未初始化的局部变量分配默认值。如果您无法在声明它的地方初始化局部变量,请确保在尝试使用它之前为其分配一个值。访问未初始化的局部变量将导致编译时错误。

于 2013-10-31T01:50:21.313 回答
2

当你做:

private static String ptNo = "";

您正在创建一个变量ptNo并使其引用一个对象String ""

当你做:

private static String ptNo = null;

您正在创建一个变量,但它没有引用任何内容。 null是 Java 中用来表示 void 引用的保留常量,即指向空的指针。

于 2013-10-31T01:50:28.177 回答
2

"" 是一个具有空值的实际字符串。

null 表示 String 变量不指向任何内容。

举个例子,

String a="";
String b=null;

a.equals(b) 返回 false,因为 "" 和 null 不占用内存中的相同空间。

于 2013-10-31T01:50:34.303 回答