【问题标题】:How to check if int is initialized? [duplicate]如何检查 int 是否已初始化? [复制]
【发布时间】:2024-01-10 09:53:01
【问题描述】:

如何检查我声明的 int 是否已使用变量初始化? number == null 不起作用,因为 int 是原始类型。

This question 不相关,因为用户询问如何检查 int 是否为空,回答者使用 Integer 响应。但是,我想检查原始数据类型int 是否已初始化。

This question 也无关紧要,因为那是针对引用类型,而我要求的是原始类型。已经澄清 -.- 并且仍然被标记......

【问题讨论】:

  • int 是字段还是局部变量?
  • 同样的问题回答了它。如果不是局部变量,检查是否为0,如果是局部变量,则编译不出来
  • @user7 为什么不应该编译?
  • @NiVeR Java 有明确赋值的概念。变量在使用前必须明确赋值。
  • 哦,好吧,如果你使用它不会编译是的。我错过了这一点

标签: java initialization int


【解决方案1】:

实例字段初始化为null、0等。本地字段未初始化。没有办法对此进行测试,除非尝试使用该字段并生成异常。一个好的做法是在声明局部变量时始终初始化它们。

【讨论】:

  • 好答案。如果有人关心检测初始化,请使用Null 和对象包装器,这是为八种原始类型中的每一种定义的类。例如,Integer 类为 int 原语。 Integer i = null ;……if( null == i ) { i = 42 ; }Auto-boxing 自动将原始 int 包装到 Integer 对象中。
  • 虽然我同意这一点,但设计 Spring 的人决定以另一种方式初始化 bean 属性并使默认分配变得多余(更不用说误导了)。不要拍信使,我觉得春天很淫秽。
【解决方案2】:

对于字段变量,您可以通过比较 int0 来检查,这是 int 字段的默认值:

private int x: // default 0 for an int
... 
public void foo(){
  if (x == 0){  // valid check
    // ...
  }
}   

Built-in types have a default "reasonable" value

默认值

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

下图总结了以上数据的默认值 类型。

数据类型默认值(用于字段) 字节 0 短 0 整数 0 长0L 浮动 0.0f 双0.0d 字符 '\u0000' 字符串(或任何对象) null 布尔假

对于局部变量,不需要检查,甚至可以进行检查,因为编译器会为您进行检查
如果任何语句引用未初始化的变量,编译确实不会通过。
因此,检查int 局部变量的代码将不会因此而自行编译:

public void foo(){
    int a;      
    if (a==0) { // doesn't compile : The local variable a may not have been initialized     
      ...   
    }
}

【讨论】: