能不能骗到你?尽管来试试!一道java笔试题!public class Test
{
public static void main(String[] args)
{
int a = 5;
System.out.println("ddsadasa" + (a > 5 ? 9.0 : 9));
}}
运行结果是( )A ddsadasa9 B ddsadasa9.0 C 编译出错 D 以上答案都不对选了答案的,要说个理由,O(∩_∩)O哈哈~其实题目很简单的。
不用我多说,估计骗不了多少人。。
散分啦,散分啦,散分啦,大家顶啊。顶的人越少,你得到的分越多哦,O(∩_∩)O哈哈~
{
public static void main(String[] args)
{
int a = 5;
System.out.println("ddsadasa" + (a > 5 ? 9.0 : 9));
}}
运行结果是( )A ddsadasa9 B ddsadasa9.0 C 编译出错 D 以上答案都不对选了答案的,要说个理由,O(∩_∩)O哈哈~其实题目很简单的。
不用我多说,估计骗不了多少人。。
散分啦,散分啦,散分啦,大家顶啊。顶的人越少,你得到的分越多哦,O(∩_∩)O哈哈~
原因
a>5时,返回9.0;
a>=5时,9->9.0,整型自动转化为double,返回的还是9.0
没发现什么特殊的地方,知道?:表达式怎么确定类型即可。
记得Java Puzzlers这本书上有例子。
原因
a>5时,返回9.0;
a<=5时,9->9.0,整型自动转化为double,返回的还是9.0
(a > 5 ? 9.0 : 9)
因为9.0
都自动转化为了Double
所以返回9.0
ddsadasa9.0
例如:
public class Test1
{
public static void main(String[] args)
{
int a = 5;
double b=1.0;
System.out.println(a+b);
}}输出结果是6.0~~
+运算符运算顺序:左-->右
2,三元运算符中的两个表达式中有一个是对象如String,则另一个自动封箱为对象
若两个基本类型不能直接比较如boolean和别的类型,则两则都封箱;
3,两个表达式都是可比较的基本数据类型时(不含boolean类型),
遵从java数据类型转化规则;
4,2个表达式中有一个char,而另一个是整形数据:
当该整型数据指明数据类型时,遵从规则3;
当该整型数据类型不明确指明类型时:
当该值介于[0,65535]时可表示为char类型,则制动转化为char;
当该值位于其他范围时,则转化为int或long然后根据规则3运算。
有上面4条,则下面的结果就很容易理解了:int a = 6,b = 3;
byte bt = 12;
System.out.println(a > 5 ? 12 : 'a');//
System.out.println(b > 5 ? 12 : 'a');//a
System.out.println(a > 5 ? bt : 'a');//12
System.out.println(b > 5 ? bt : 'a');//97
System.out.println(a > 5 ? 911 : 'a');//Ώ
System.out.println(b > 5 ? 911 : 'a');//a
System.out.println(a > 5 ? 65535 : 'a');//
System.out.println(b > 5 ? 65535 : 'a');//a
System.out.println(a > 5 ? 65536 : 'a');//65536
System.out.println(b > 5 ? 65536 : 'a');//97
System.out.println(a > 5 ? 911L : 'a');//911
System.out.println(b > 5 ? 911L : 'a');//97
System.out.println(a > 5 ? 911.1 : 'a');//911.1
System.out.println(b > 5 ? 911.1 : 'a');//97.0
System.out.println(12 + (a > 5 ? 911 : 'a'));//923
System.out.println(12 + (b > 5 ? 911 : 'a'));//109
//System.out.println(12 + (a > 5 ? 911 : "a"));//error
//System.out.println(12 + (b > 5 ? 911 : "a"));//error
System.out.println("12" + (a > 5 ? 911 : 'a'));//12Ώ
System.out.println("12" + (b > 5 ? 911 : 'a'));//12a
System.out.println("12" + (a > 5 ? 911 : "a"));//12911
System.out.println("12" + (b > 5 ? 911 : "a"));//12a
System.out.println(a > 5 ? 911 : "a");//911,JDK50+
System.out.println(b > 5 ? 911 : "a");//a,JDK50+
System.out.println(a > 5 ? 911.1 : "a");//911.1,JDK50+
System.out.println(b > 5 ? 911.1 : "a");//a,JDK50+
System.out.println(a > 5 ? true : 'a');//true,JDK50+
System.out.println(b > 5 ? true : 'a');//a,JDK50+
System.out.println(a > 5 ? true : 11);//true,JDK50+
System.out.println(b > 5 ? true : 11);//11,JDK50+
//System.out.println(11+(a > 5 ? true : 11));//error
//System.out.println(11+(b > 5 ? true : 11));//error
_______◆_操作数其中一个是 byte 或 Byte 类型,而另一个是 short 或 Shoft 类型,那么
_________ 这个表达式就是 shoft 类型
_______◆_操作数中的一个是类型 T (T 可以是 byte、short 或者是 char 类型),而另一个
_________ 是 int 类型的常数,其可以用 T 类型来表示时,那么这个表达式就是 T 类型
_______◆_操作数中的一个是 Byte 类型,而另一个是 int 类型的常数,其可以用 byte 类型来
_________ 表示,那么这个表达式就是 byte 类型
_______◆_操作数中的一个是 Short 类型,而另一个是 int 类型的常数,其可以用 short 类型
_________ 来表示,那么这个表达式就是 short 类型
_______◆_操作数中的一个是 Character 类型,而另一个是 int 类型的常数,其可以用 char 类
_________ 型来表示,那么这个表达式就是 char 类型
_______◆_否则,双目数值提升(binary numeric promotion)会被用于操作数的类型中,条件表
_________ 达式的类型是第二个和第三个操作数提升后的类型。注意:双目数值提升时进行拆箱转换和
_________ 值集转换(value set conversion)这里只是部分的,更多的看 http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#341287这个题目会用到最后一点——双目数值类型提升。所谓的双目数值提升通俗点的描述是:
两个数根据一定的规则把其中一个的类型转为另一个类型。根据 Java Language Specification 中关于双目数值提升的描述(部分)http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#170983____●_如果任意一个操作数是 float 类型,那另外一个会被转换成为 float 类型
我的目标是 ----> ^_^
System.out.println(""+price);
double distandce=123.560d;
System.out.println(distandce);
输出结果:
2.57
123.56看看这个是为什么?