A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 打工人 金牌黑马   /  2012-10-7 21:19  /  2015 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯海霞 于 2012-10-8 08:25 编辑

class a
{
        public static void main(String[] args)
        {   
                int x=2,y;
        
           y=(x>1)?'a':3;
                System.out.println(y);
                System.out.println((x>1)?'c':3);//这两行的结果为啥不一样呢
               
                 y=(x>1)?'a':x;
                System.out.println(y);
                System.out.println((x>1)?'c':x);//跟上面加注释的一行的结果,类型为啥又不一样呢
                System.out.println((x>1)?'c':(char)x);
        }
}

9 个回复

倒序浏览
y int 变量,  直接赋a,就存ASC吗了,
第二句你是打印的字符,单引号括起的
回复 使用道具 举报
李兆宁 发表于 2012-10-7 21:29
y int 变量,  直接赋a,就存ASC吗了,
第二句你是打印的字符,单引号括起的 ...

没明白。。。
回复 使用道具 举报
目测分析第二次出现问题的关键在于x为int类型,3却可以做整数,也可以是字符。
但在类型转换的时候,往高了转,字符转int类型,就成99了
回复 使用道具 举报
冯海霞 发表于 2012-10-7 21:31
没明白。。。

类型自动转换了,char型的转成int,再赋值给y,因为y是int类型
回复 使用道具 举报
public class Apple{
public static void main(String[] args)
{
   char x='Y';
   int i=1;
   System.out.println(true? x:i);
   System.out.println(false ? 1:x);
}

}

(1)如果表达式1和表达式2具有相同的类型,那么整个条件运算符结果的类型就是这个类型。

(2)如果一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类型的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。


(3)除以上情况外,如果表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型。


System.out.println(true?x:0); / ne3。表达式1是char类型,表达式2是int类型的常量表达式,而且这个常量表达式的值0可以用char类型来表示,因此整个条件运算符结果的类型就应当是char类型,所以输出的结果就是'A'。
System.out.println(true?x:1111111110); / ne4。表达式1是char类型,表达式2是int类型的常量表达式,但是这个常量表达式的值已经超出了char类型的取值范围,因此要进行类型提升,把char类型提升为int类型,整个条件运算符结果的类型就是int类型了,所以输出的结果是65(字符A的ASCII码)。


System.out.println(false?i:x); / ne5。表达式1是int类型的变量,表达式2是char类型的变量,没有常量表达式。因此要进行类型提升,把char类型提升为int类型,整个条件运算符结果的类型就是int类型。所以输出结果就是65。

耐心看看!
回复 使用道具 举报
曾浩 发表于 2012-10-7 21:40
public class Apple{
public static void main(String[] args)
{

我试试能不能看懂
回复 使用道具 举报
  y=(x>1)?'a':3;
                System.out.println(y);
1. y是int 将一个字符存在int变量里面 将会储存这个字符的ascii码 小写字母a的ascii码是97               
System.out.println((x>1)?'c':3);//这两行的结果为啥不一样呢
2. 返回 字符 c     
      y=(x>1)?'a':x;
         System.out.println(y);
3. 跟1情况差不错           
     System.out.println((x>1)?'c':x);//跟上面加注释的一行的结果,类型为啥又不一样呢
System.out.println((x>1)?'c':(char)x);

从上面看出来 java条件表达式的运算过程中的表达式会进行类型转换
回复 使用道具 举报
曾浩 发表于 2012-10-7 21:40
public class Apple{
public static void main(String[] args)
{

这是摘自java解惑?我弄明白了,谢谢你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马