对 Java 中实例变量的默认初始化的混淆

confusion over default initialisation of instance variables in java

提问人: 提问时间:3/4/2016 最后编辑:Himanshu Bhandari 更新时间:3/4/2016 访问量:33

问:

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

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 初始化 运算符 逻辑

评论


答:

0赞 Elliott Frisch 3/4/2016 #1

原语的默认值是 且不小于 。将值设置为负值,例如int000

int x = -1;
int y = -1;
0赞 Chris Kitching 3/4/2016 #2

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

0赞 Tudedude 3/4/2016 #3

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

return (this.x <= 0 || this.y <= 0);
0赞 Vikrant Kashyap 3/4/2016 #4
int x; int y; //two global variable.

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

现在您的声明

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

这里和两者都是初始化的,所以第一个条件语句 (this.x<0) 将返回并且永远不会移动到第二个语句,因为如果第一个语句返回 false,逻辑运算符永远不会检查第二个条件。xyzerofalseOR

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

谢谢。。