public class T {
public static void main(String[] args) {
int i = 0;
System.out.println(false ? i : 'b');
System.out.println(false ? 10 : 'b');
}
}这个代码是我在看另一个人发的帖子里面的代码以后再重新写的,
我本以为执行效果一样,但发现我错了,
输出结果为:
98
b提问:为什么第一种情况对'b'进行转换,而第二种情况不进行转换?请高手指点。
public static void main(String[] args) {
int i = 0;
System.out.println(false ? i : 'b');
System.out.println(false ? 10 : 'b');
}
}这个代码是我在看另一个人发的帖子里面的代码以后再重新写的,
我本以为执行效果一样,但发现我错了,
输出结果为:
98
b提问:为什么第一种情况对'b'进行转换,而第二种情况不进行转换?请高手指点。
可以将10改为10L看看,输出的也是98。
2.如果表达式2或表达式3类型为btye,short或char,而另一表达式类型为int且却是byte,short或char的形式,则返回类型为byte,short或char;
3.情况1,2都不符合,则返回表达式2,3的较高提升类型第一条语句中i是int型,所以返回提升类型int
第二条语句中10可以认为是char型,所以返回char类型的'b'
public class T {
public static void main(String[] args) {
int i = 0;
System.out.println(false ? i : 'b'); //这里返回的是char型'b'对应的ASC码
System.out.println(false ? 10 : 'b'); //返回的是char型'b'
}
}
多谢回复,
但在默认情况下 编译器应该把10当作 int 类型阿,怎能认为 char 类型呢?
难道还有什么其他的说道吗?
System.out.println(false ? 10 : 'b');
i为 int 型, 10 也为int 型,但 i 为 变量 , 10 为 常量 ,所以就有区别了
public class T {
public static void main(String[] args) {
final int i = 0;
System.out.println(false ? i : 'b');
System.out.println(false ? 10 : 'b');
}
}这样真的输出是:
b
b
至于为什么加上final之后就打印b我现在也不太明白
public static void main(String[] args) {
final int i = 0;
System.out.println(false ? i : 'b');
System.out.println(false ? 10 : 'b');
}
}
和
public class T {
public static void main(String[] args) {
final int i = 0;
System.out.println(false ? 0 : 'b');
System.out.println(false ? 10 : 'b');
}
}
编译出来的class文件是完全一样的。如果你能理解System.out.println(false ? 0 : 'b')会输出b,你就知道为什了。至于为什么这两种写法会生成一样的class文件,就是那个final惹得祸。