【问题标题】:confusion over default initialisation of instance variables in javajava中实例变量默认初始化的混淆
【发布时间】:2016-06-17 17:43:16
【问题描述】:
我是 Java 新手,正在尝试学习默认初始化的概念。下面是我想出的代码。即使我没有为变量x 和y 设置初始值,我已经实例化了变量所属的类的实例。我想在初始化后,变量 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,这些全局变量 x 和 y 将填充 default 值 datatype (int),即 0。所以, X 和 Y 都将使用 Zero 进行实例化和初始化。
现在你的声明
(this.x < 0 || this.y < 0); here this.x<0 is equivalent to 0<0 which returns false.
这里 x 和 y 都用 zero 初始化,所以第一个条件语句 (this.xfalse 并且永远不会移动到第二个语句,因为逻辑 OR 运算符永远不会如果第一个语句返回 false,则检查第二个条件。
所以您的方法boolean isVehicleInNegArea() 将返回false。
谢谢你..