【问题标题】:Initialising instance variables as null, "" or 0将实例变量初始化为 null、"" 或 0
【发布时间】:2013-11-10 21:32:03
【问题描述】:

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

有什么区别:

private static String thing = null;

private static String thing = "";

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

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

抱歉,我学习新语言很困难。

【问题讨论】:

  • 无需道歉。我们曾经都是初学者。
  • null 只能分配给 objects(而不是 primitives)。
  • 在 Java 中(无论好坏)对象默认为 null,这与 C/C++ 中的空指针非常相似。与一些“虚假”的动态语言(JavaScript 等)不同,您需要明确。它既好又坏。你不会在 Java 中看到像 if(string){..} 这样的语句。你会看到 -> if(string != null && !string.isEmpty(){...} 或 if(SomeClass.isEmptyOrNull(string)) {..}
  • @Skippy 不用担心,希望对您有所帮助!

标签: java null initialization instance-variables


【解决方案1】:

String初始化为空字符串除外

private static String thing = "";

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

String 初始化为null 还是空字符串由您决定:“nothing”和“empty string”之间存在差异 *,所以您必须决定你想要哪一个。


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

【讨论】:

  • Java will set all primitives to their default values, and all reference types (including java.String) to null. 我相信最好提到这仅适用于成员变量。对于局部变量,Java 不会做这样的默认值初始化,开发者需要确保变量被正确初始化。
【解决方案2】:

当你制作时:

private static String ptNo = "";

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

当你制作时:

private static String ptNo = null;

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

【讨论】:

    【解决方案3】:

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

    来自 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
    

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

    【讨论】:

      【解决方案4】:

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

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

      举个例子,

      String a="";
      String b=null;
      

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

      【讨论】:

      • 您的回答非常模棱两可,几乎是错误的。 == 并不是真正比较字符串(即对象)的方法。
      • @Skippy 是的,我使用 == 只是为了更容易理解。顺便说一句,我已经编辑了它。 NullPointerException 是否意味着它指向任何内容?如果我错了,请纠正我,我也是一个初学者
      猜你喜欢
      • 2011-12-25
      • 1970-01-01
      • 2017-04-05
      • 2011-03-18
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      相关资源
      最近更新 更多