黑马程序员技术交流社区

标题: 好新鲜的情况。我觉得哈 [打印本页]

作者: 黑马-张洋    时间: 2013-2-26 15:08
标题: 好新鲜的情况。我觉得哈
  1. public class test {
  2.         public static void main(String args[]) {
  3.                 int x = 4;
  4.                 String str="qqq";
  5.                 char ch='x';
  6.                 System.out.println("1:value is " +((x>4)?99.9:9));
  7.                 System.out.println("2:value is " +((x>4)?99:9));
  8.                 System.out.println("3:value is " +((x>4)?"xyz":9));
  9.                 System.out.println("4:value is " +((x>4)?9.999999999999999:9));
  10.                 System.out.println("5:value is " +((x>4)?str:9));
  11.        
  12.                 System.out.println(ch);
  13.                 System.out.println("6:value is " +((x>4)?ch:9));
  14.                 System.out.println("--------------------");
  15.         }
  16. }
复制代码
打印结果:
1:value is 9.0
2:value is 9
3:value is 9
4:value is 9.0
5:value is 9
x
6:value is        
--------------------


第一:我本来我以为系统自己去取:后面的那个数就完了。结果还要根据第一个数的情况转变。为什么?像例子1,不转不行吗?转了岂不是不和我们预定的一样了?

第二:6:value is那里为什么打不出来9
作者: 黑马刘杰    时间: 2013-2-26 15:22
本帖最后由 黑马刘杰 于 2013-2-26 15:28 编辑
  1. //这里涉及到类型转换问题了,ch:9以运算符左边为准
  2.         System.out.println(ch);
  3.         //ch是char类型,这里系统将9认为9也是char类型的,即ASCII码
  4.         System.out.println("6:value is " +((x>4)?ch:9));//9在ASCII码表中时TAB,这里输出了TAB
  5.         System.out.println("--------------------");
复制代码

作者: 陈圳    时间: 2013-2-26 15:38
  1. package Day16;
  2. public class Test2 {
  3.         public static void main(String args[]) {
  4.                 int x = 4;
  5.                 String str="qqq";
  6.                 char ch='x';
  7.                 System.out.println("1:value is " +((x>4)?99.9:9));  //比较数为double型,被提升了.
  8.                 System.out.println("2:value is " +((x>4)?99:9));    // 输出int型9
  9.                 System.out.println("3:value is " +((x>4)?"xyz":9)); //输出字符串"9" 例:4+"";=="4";
  10.                 System.out.println("4:value is " +((x>4)?9.999999999999999:9));//比较数为double型,被提升了.
  11.                 System.out.println("5:value is " +((x>4)?str:9));    //同s.o.y()3
  12.                 System.out.println(ch);  //输出字符串"x";
  13.                 System.out.println("6:value is " +((x>4)?ch:9));//你的原句:9被转换成字符数值输出
  14.                 System.out.println((char)9);  //9
  15.                 System.out.println("--------------------");
  16.         }
  17. }
  18. /*
  19. * 1:value is 9.0
  20. 2:value is 9
  21. 3:value is 9
  22. 4:value is 9.0
  23. 5:value is 9
  24. x
  25. 6:value is 9
  26. 6:value is        
  27.        
  28. --------------------
  29. */
复制代码

作者: 黑马-张洋    时间: 2013-2-26 15:38
黑马刘杰 发表于 2013-2-26 15:22

谢谢,果然,我换了换
System.out.println("6:value is " +((x>4)?ch:86));
就打印的是ASCII码对应的东西了
作者: 贾文泽    时间: 2013-2-26 15:42
6:value is         //这后面其实是有东西的,是输出了一个制表符,看不到而已,就是那个tab键
对于你的第一个问题,是这个表达式(x>4)?99.9:9)返回值的数据类型,在JDK1.5之前,要求后两个表达式【99.9和9】的类型是一样的,比如都是int,或者都是char,
不过在JDK1.5之后,因为有自动装箱跟拆箱了,所以就对整个表达式返回值的类型做了改变,可以提升或者可以转化

1 char ch = 'a';
2 int num = 0 ;
3 boolean bool = true;
4 System.out.print( bool ? ch : 0);  //这里不是 bool ? ch : num 那样会打印两个97
5 System.out.print( !bool ? num : ch);

1 如果表达式1和表达式2操作数具有相同的类型那么它就是条件表达式的类型。   
2 如果一个表达式的类型是byte、short、char类型的而另外一个是int类型的常量表达式且它的值可以用类型byte、short、char三者之一表示的那么条件表达式的类型就是三者之一   
3 否则将对操作数类型进行二进制数字提升而条件表达式的类型就是第二个和第三个操作数被提升之后的类型





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2