黑马程序员技术交流社区
标题:
基本数据类型小问题
[打印本页]
作者:
郑雪
时间:
2013-5-1 08:50
标题:
基本数据类型小问题
本帖最后由 郑雪 于 2013-5-2 10:37 编辑
看这段代码
public class Q6
{
public static void main(String args[ ]){
int x=4;
System.out.println("value is"+((x>4) ? 99.99 : 9) );
}
}
输出结果是value is9.0,为什么是9.0而不是9?
作者:
陈国斌
时间:
2013-5-1 09:06
是因为:System.out.println("value is"+((x>4) ? 99.99 : 9) );
如果x>4,则打印99.9,如果x<4则打印9,虽然x是int类型,但99.9或者9,它的类型跟x是没关系的,但99.9和9 在一起做运算的话,9会提升为99.9的类型(默认是double类型),所以结果就是9.0.
作者:
陈国斌
时间:
2013-5-1 09:22
int和float类型之间做运算转换为int,所以要避免损失精度问题
但实数默认是double类型的。
作者:
403383221
时间:
2013-5-1 09:52
本帖最后由 403383221 于 2013-5-1 10:13 编辑
这个是因为三目运算符比较特殊
int a=5;
System.out.println("a="+((a<5)?10.9:9));
这段代码的输出是9.0。因为三目运算符中有一个10.9,java会根据运算符的精度类型进行自动类型转换。因此9会变为9.0
char x='x';
int i=10;
System.out.println(false?i:x);
System.out.println(false?100:x);
而这段代码的输出是
120
x
对于第一行输出,与上个例子相同,x被提升了类型,变为int
而对于第二行,由于100是一个常量。若三目运算符中的两个表达式有一个是常量表达式,另一个是类型T的表达式,且常量表达式可以被T表示,则输出结果是T类型。因此输出是字符x。如果常量不能被T表示,则提升类型,如:
System.out.println(false?99999:x);
结果为
120
作者:
芦玉明
时间:
2013-5-1 09:58
我自己的理解是这样的
public class Q6
{
public static void main(String args[ ])
{
int x=4;double y;
if (x>4)
y=99.9;
else
y=9;
System.out.println(y);
}
}
复制代码
我觉得引入第二个变量就比较好理解了。
作者:
蔚蓝小嗨
时间:
2013-5-1 11:05
java运算时,为了避免损失精度,会根据运算符的精度类型进行类型转换,因为99.99比9精度要高,所以会 转换成float类型的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2