简单的题目,你一定说不出正确答案,除非动手运行。。。

dugu666 2008-11-26 10:49:01
<% int a = 5;

System.out.println("test1" + (a > 5 ? 'b' : (int)911 ));
%>

...全文
124 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dugu666 2008-11-27
  • 打赏
  • 举报
回复
当char与int相遇的时候,结果一定是char 型
当char与byte,short,long,float,double相遇的时候,结果一定是byte,short,long,float,double型
dugu666 2008-11-27
  • 打赏
  • 举报
回复
别轻易相信别人说的话,按照6楼的理论,System.out.println("test1" + (a > 5 ? (byte)'b' : 911 )); 和
System.out.println("test1" + (a > 5 ? (byte)'b' : (byte)911 )); 应该得到相同的结果。。。
而事实上并不一样。。。
当第二个操作数是byte,而第三个是int类型时,结果是int类型。。。
lgtwboy 2008-11-26
  • 打赏
  • 举报
回复
冒号前后类型不一致
L502650 2008-11-26
  • 打赏
  • 举报
回复
当然说不出了..这就是个数据类型自动转换的问题.INT自动转化成CHAR嘛.
lgtwboy 2008-11-26
  • 打赏
  • 举报
回复
?
mooninday 2008-11-26
  • 打赏
  • 举报
回复
我机器上打印出"test1?"
莫名了,求解...
perperyu 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 niuniu20008 的回复:]
System.out.println(true ? x : y);
* 如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。
* 如果一个操作数的类型是T,T表示byte、short或char,而另一个操作数是一个int类型的常量表达式,它的值是可以用类型T表示的,那么条件表达式的类型就是T。
* 否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提…
[/Quote]

学习了 thank you
niuniu20008 2008-11-26
  • 打赏
  • 举报
回复
System.out.println(true ? x : y);
* 如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。
* 如果一个操作数的类型是T,T表示byte、short或char,而另一个操作数是一个int类型的常量表达式,它的值是可以用类型T表示的,那么条件表达式的类型就是T。
* 否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。


char x = 'X';
int i = 0;
System.out.println(true ? x : 0);
System.out.println(false ? i : x);
xian_hf 2008-11-26
  • 打赏
  • 举报
回复
没有(int)的话会是test1911
有的话会强转911对应的文字,显示乱码

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧