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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦冲 黑马帝   /  2012-5-29 00:51  /  2740 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test
  2. {

  3.         public static void main(String[] args)
  4.         {
  5.                 char x='X';
  6.                 int i=0;
  7.                 System.out.println(true?x:0);
  8.                 System.out.println(false?i:x);
  9.         }
  10. }
复制代码
我的JDK1.6,出现的结果是:
X
88
晕,半天没明白过来~,细节没学好啊,有人帮忙解释下吗?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
三元运算符  
true ?A:B ----->>>>取A
false ?A:B----- >>>>取B
1,ture ?x:0;取的是x,x是char类型的变量,代表的是字符 'X' 所以得到X
2,false ?i:x;前面是false 取的是后面的x,这个表达式让i和x建立了联系.三元运算符也是运算符的一种,因为i是int型的变量 char在与int参与运算的时候类型自动提升为int. 字符X对应的码表值是 88因此得到88.

点评

谢谢啊  发表于 2012-5-29 18:18
回复 使用道具 举报
贴出自己写的代码供对三元运算符的理解和讨论
  1. package java基础知识;

  2. import java.util.Scanner;

  3. public class 三元运算符 {

  4.         /**
  5.          * @param 三元运算符
  6.          * 三元运算符是能操作三个数的运算符,如 X?Y:Z,X是boolean 类型的表达式,先计算X的值,若为true,整个三元运算符的结果是表达式 Y的值,否则
  7.          * 整个运算的结果为表达式Z的值.如 int score = 75; String type = score >= 60?"及格":"不及格";
  8.          */
  9.         public static void main(String[] args) {
  10.                 // 三元运算符判断两个数的大小
  11.                 Scanner input = new Scanner (System.in);
  12.                 System.out.println("请输入两个数字");
  13.                 int a = input.nextInt();
  14.                 int b = input.nextInt();
  15.                 System.out.println("你输入的数字a="+a +"  b="+b);
  16.                 int c = a>b?a:b;
  17.                 //首先判断a是否大于b,如果a大于b就将a的值赋值给三元运算符的结果c,如果a不大于b就将b的值赋值给c
  18.                 System.out.println("取a和b之间较大的数"+c);
  19.                 String  m = a>b?"大于":"不大于";
  20.                 System.out.println("a是否大于b:"+m);
  21.                 }
  22. }
复制代码
回复 使用道具 举报
三目运算符“:”,运算时“:”号左右的参数类型必须一致,或者能够兼容。否则以第一个为准.
你把第二句代码 写成  System.out.println(false ? (char)i : x); 就可以正常输出x了

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 丁桂松 于 2012-5-29 18:11 编辑
黄克帅 发表于 2012-5-29 01:43
三目运算符“:”,运算时“:”号左右的参数类型必须一致,或者能够兼容。否则以第一个为准.
你把第二句代码  ...


三元运算符必须得到一个结果,你的结果是什么类型的.就取决与你参与运算的参数
回复 使用道具 举报
char x='X';

07.                int i=0;

08.                System.out.println(true?x:0);

09.                System.out.println(false?i:x);
我是这样理解的不知道对不
对于?后面的两个类型总是自动转换为较高级类型
这是测试代码:
char a='a';
int i=5;
float f=1.2f;       
System.out.println(true?i:a);//5
System.out.println(true?i:f);//5.0
System.out.println(false?f:a);//97.0

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1,三元运算符是运算符,2,运算符就会有运算就会有一个结果,3,既然参与运算了,不同的数据范围在参与运算就会转成较大空间的取值!
回复 使用道具 举报
丁桂松 发表于 2012-5-29 01:35
三元运算符  
true ?A:B ----->>>>取A
false ?A:B----- >>>>取B

System.out.println(true?x:0);
这里的0不也是int型么?它们也应该提升到int型才对啊,为什么还是char呢

回复 使用道具 举报
  1. package java基础知识.小结与练习;

  2. public class Demo1 {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 char x='X';

  9.         int i=0;
  10.         
  11.         System.out.println(true?x:0);//打印出字符X
  12.         System.out.println(true?x:i);//打印出88
  13.         System.out.println(false?x:0);//打印出空字符,
  14.         System.out.println(false?i:x); //打印出88
  15.         byte a =4,b=3;
  16.         byte by ;
  17.         //让变量参与了运算
  18.        // by= a+b;  //编译出错,
  19.         //by= a+4;  //编译也出错
  20.         //把常量直接进行赋值,
  21.         by =3+4;
  22.         
  23.         }
  24. //三元运算符的答案是一个结果,可以是if else的简写形式,这里的0是常量,不是变量,常量可以直接进行赋值,常量0没超过byte的范围,整个答案的结果取三元运算符答案最大的范围空间值
  25.         //结论:三元运算符的运算必须要有一个结果,一般多个表达式进行计算最后结果的数据类型为最大的类型,如int float 类型的数据和double类型的数据运算时,最后的结果是double类型的
  26. }
复制代码
回复 使用道具 举报
黄克帅 发表于 2012-5-29 01:43
三目运算符“:”,运算时“:”号左右的参数类型必须一致,或者能够兼容。否则以第一个为准.
你把第二句代码  ...

学习了:P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马