lastKeyFrameTime
O / p是:public class Hello {
int i;
char ch;
Hello(int x){
i=x;
}
Hello(char c){
ch=c;
}
public static void main(String[] args) {
Hello h=new Hello(1);
System.out.printf("value of i is %d"+"value of ch is %c",h.i,h.ch);
//Hello h=new Hello('T');
//System.out.printf("value of i is %d"+"value of ch is %c",h.i,h.ch);
}
我的问题是为什么ch值没有被初始化?
而如果另一种情况是O / p是:value of i is 1value of ch is
为什么在这种情况下我被初始化。??
答案 0 :(得分:2)
您的班级有两个构造函数,一个用于int
,另一个用于char
。无论您使用哪个来初始化类的实例,另一个变量都将使用它的默认值。
int
默认为0
。char
默认为\u0000
,null
字符,正如here所述。因此,当您致电:
Hello h=new Hello(1);
您的结果是有效的:
h.i = 1;
h.ch = '\u0000';
致电:
Hello h=new Hello('T');
有效地导致:
h.i = 0;
h.ch = 'T';
答案 1 :(得分:1)
默认情况下,Java将int初始化为0,将char初始化为null字符。因此,System.out.println会使ch看起来好像没有输出,但技术上已经初始化了。在第一种情况下,第二个构造函数不会运行,因为Hello是通过传入一个调用第一个构造函数的int参数创建的,因此ch不会设置为任何东西。注释代码的行为方式相同,但由于我默认初始化为0,因此System.out.println显示value of i is 0 value of ch is T
答案 2 :(得分:1)
根据this,int的默认值为0,char的默认值为'\ u0000'(这只是null),这就是你所看到的。
答案 3 :(得分:0)
在Java中,int基本类型的默认值为0,而默认字符为'\ u0000',即空字符。这就是为什么你没有从你的int构造函数中获得ch的值的任何可识别的原因。