java 中的默认构造函数如何被调用?
how default constructor in java gets called?
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);
}
O/p 是:value of i is 1value of ch is
我的问题是为什么ch值没有初始化??
而如果另一种情况 O/p 是:value of i is 0 value of ch is T
为什么在这种情况下我被初始化了??
Java 默认将 int 初始化为 0,将 char 初始化为空字符。因此,System.out.println 会让 ch 看起来好像没有输出,但它在技术上已经被初始化。在第一种情况下,第二个构造函数不是 运行 因为 Hello 是通过传入一个 int 参数创建的,它调用第一个构造函数,因此 ch 没有设置任何值。注释代码的行为方式相同,但由于 i 默认初始化为 0,因此 System.out.println 显示 value of i is 0 value of ch is T
在Java中,int原始类型的默认值为0,而char默认为'\u0000',即空字符。这就是为什么您无法从 int 构造函数中获得任何可识别的 ch 值的原因。
您的 class 有两个构造函数,一个接受 int
,另一个接受 char
。无论您使用哪个来初始化 class 的实例,另一个变量都将使用它的默认值。
- 类型
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';
根据 this,int 的默认值为 0,char 的默认值为 '\u0000'(它只是 null),这就是您所看到的。
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);
}
O/p 是:value of i is 1value of ch is
我的问题是为什么ch值没有初始化??
而如果另一种情况 O/p 是:value of i is 0 value of ch is T
为什么在这种情况下我被初始化了??
Java 默认将 int 初始化为 0,将 char 初始化为空字符。因此,System.out.println 会让 ch 看起来好像没有输出,但它在技术上已经被初始化。在第一种情况下,第二个构造函数不是 运行 因为 Hello 是通过传入一个 int 参数创建的,它调用第一个构造函数,因此 ch 没有设置任何值。注释代码的行为方式相同,但由于 i 默认初始化为 0,因此 System.out.println 显示 value of i is 0 value of ch is T
在Java中,int原始类型的默认值为0,而char默认为'\u0000',即空字符。这就是为什么您无法从 int 构造函数中获得任何可识别的 ch 值的原因。
您的 class 有两个构造函数,一个接受 int
,另一个接受 char
。无论您使用哪个来初始化 class 的实例,另一个变量都将使用它的默认值。
- 类型
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';
根据 this,int 的默认值为 0,char 的默认值为 '\u0000'(它只是 null),这就是您所看到的。