【问题标题】:confusion over default initialisation of instance variables in javajava中实例变量默认初始化的混淆
【发布时间】:2016-06-17 17:43:16
【问题描述】:

我是 Java 新手,正在尝试学习默认初始化的概念。下面是我想出的代码。即使我没有为变量xy 设置初始值,我已经实例化了变量所属的类的实例。我想在初始化后,变量 x 和 y 将默认设置为 0。但是当我使用 isVehicleInNegArea 方法进行测试时,该方法返回 false。为什么会这样?有什么我想念的吗?请帮帮我!

public class Vehicle{

    public static void main(String[] args) {
        Vehiclev1 = new Vehicle();
        boolean onMap = v1.isVehicleInNegArea();
        System.out.println(onMap);
    }

    int x;
    int y;

    boolean isVehicleInNegArea(){
        return (this.x < 0 || this.y < 0);
    }
}

【问题讨论】:

    标签: java initialization logical-operators boolean-logic


    【解决方案1】:

    原语int(s) 的默认值为0 并且0 不小于0。将值设置为负值,例如

    int x = -1;
    int y = -1;
    

    【讨论】:

      【解决方案2】:

      Java 的默认初始化将数值类型设置为零,布尔值设置为 false,对象类型设置为 null。

      【讨论】:

        【解决方案3】:

        虽然原始整数类型在未实例化时将设置为 0,但默认情况下,您正在检查它们是否小于 0,不小于或等于。如果它们是 0,它们不小于 0,它们只是 0。如果你希望它默认为 true,我建议在实例化它们时将它们设置为 -1,或者进行检查

        return (this.x <= 0 || this.y <= 0);
        

        【讨论】:

          【解决方案4】:
          int x; int y; //two global variable.
          

          在这里,当您执行此语句时,Vehicl ev1 = new Vehicle(); 将执行 default constuctor,这些全局变量 xy 将填充 defaultdatatype (int),即 0。所以, XY 都将使用 Zero 进行实例化和初始化。

          现在你的声明

          (this.x < 0 || this.y < 0); here this.x<0 is equivalent to 0<0 which returns false.
          

          这里 xy 都用 zero 初始化,所以第一个条件语句 (this.xfalse 并且永远不会移动到第二个语句,因为逻辑 OR 运算符永远不会如果第一个语句返回 false,则检查第二个条件。

          所以您的方法boolean isVehicleInNegArea() 将返回false

          谢谢你..

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-08-14
            • 1970-01-01
            • 2014-09-14
            • 2013-01-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多