JAVA中为何这个程序最后打出来的结果是‘你爱她’???

ps:这是书上课后习题,但我没懂是什么意思。特别不懂这个条件控制语句x>'A'这些字母与汉字应该是怎么比较的,怎么回事??

public class Ch3E1 {

public static void main(String[] args){
char x='你', y='e', z='吃';
if (x>'A'){
y='爱';
z='情';
}
else
y='我';
z='她';
System.out.println(" " + x + y + z);
}

}

因为字符'你'在ascii中值是20320,字符'A'在ascii中值是65,所以x>'A'成立,y='爱',z='情',

而你的else语句中没有大括号,else只作用于一行,因此z='她'会执行,所以最终的结果是:

你爱她

你的代码等同于:

public static void main(String[] args)
{
char x = '你', y = 'e', z = '吃';
System.out.println("你=" + (int) '你' + ",A=" + (int) 'A');// 分别打印出'你'和'A'的ascii值
if (x > 'A')
{
y = '爱';
z = '情';
} else
{
y = '我';
}
z = '她';
System.out.println(" " + x + y + z);
}

运行结果:

你=20320,A=65
 你爱她

追问

ascii里面不是没有汉字吗??汉字对应的值应该在哪个表里面查?

追答

汗,一般这个没什么用,不需要查的。如果你实在想查的话,可以找utf-8编码表,在编码表中'你'对应的是4F60,这是16进制,转换成10进制就是20320

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-28
你们应该是在学习char类型?

char在java里面定义为2个字节,一个字节为8位,所以char就是16位
所以char里可以放汉字

而汉字和字母的比较实际上就是两个16位二进制的比较了
可以用System.out.println(Integer.toBinaryString(“”));来转换进行验证

你:100111101100000
A : 1000001
高位的0被省略
第2个回答  2013-09-28
x>'A' 成立所以先赋值y=‘爱’ z=‘情’

后面这两条语句:
y='我';
z='她';
这两条语句没打上括号{},所以else是到y这里就结束了,后面的z就赋值为‘她’了。你打上{}就会输出 :你爱情
第3个回答  2013-09-28
x 一直没变化

x>'A' y='爱'

最后z=‘她' 不在if的范围内,

所以
x='你'
y='爱'
z='她'
相似回答