初学JAVA小问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 04:50:48
public class Ras {
public static void main (String[]args){
char x = 'B';
int i = 0;
System.out.println(true?x:0); /*答案为B我,我测试了下只要是5位数50000以下左右的都会是B 在高了就是66了*/
System.out.println(true?x:1111111110);/*答案是66 ,这个我知道因为3元运算后面的结果必须同一类型111111110属于整形所以X也会是整形参考ASCLL码`还有就是这不是2进制随便乱输什么数都可以只要高出5位*/
System.out.println(false?i:x);/*同上*/
}
}
才开始学JAVA左右1个问题困扰着我,今天问老师说这个开发反正用不鸟也不必须专这么深``哎害我今天1天听课没听好。现在问题是为什么第1步输出那会是B了,为什么不是66 高出5位数就是66了`哪位大大麻烦说下,

这个问题嘛,是java的重载机制,和数据自动转换在作怪。
System.out.println(true?x:0),是调用的println(char)这个方法。它将x和0都看为是char类型,通过true?x:0运算, 0被认为是char类型。(0-65535之间的数都可以被认为char,也可以认为是int)
System.out.println(true?x:1111111110),调用的是println(int)这个方法。
1111111110大于65535,不能认为是char,所以,x被转为int型了。
System.out.println(false?i:x);也是数据自动转换的原因。
你可以试着看一下。
char x = 'B';
char i = 0;
System.out.println(false?i:x);
这里有个谁优先转为谁的问题,你可以到网上查一下。

当是65535的时候都输出B
当大于65535的时候输出66

char的最大值是65535

还有char a = 65535;这句话是能通过编译的
char a = 65536;是通不过编译的

看了这些你有什么感想没有?!

char x = 'B';
Object object=new Object();
object=true?x:65535;//object=true?x:65536
System.out.println(object.getClass());
System.out.println(object);

是这么回事,java中采用unicode编码,char是两个字节,16位,最大能表示65535,而int是4 个字节,能表示多大就不说了。
java里数据转型都是小的向大的转,所以这里改为大于65535的数字,因为char本身不能表示那么大的数了,它就会自动转换为int型,也就是66了。

你可以把那个数字改为负数试试