首页 > 试题广场 >

以下JAVA程序的运行结果是什么( ) publ...

[单选题]
以下JAVA程序的运行结果是什么(  )
public static void main(String[] args) {
    Object o1 = true ? new Integer(1) : new Double(2.0);
    Object o2;
    if (true) {
    o2 = new Integer(1);
    } else {
        o2 = new Double(2.0);
    }
    System.out.print(o1);
    System.out.print(" ");         
    System.out.print(o2);
}


  • 1 1
  • 1.0 1.0
  • 1 1.0
  • 1.0 1
答案选D。
三元操作符如果遇到可以转换为数字的类型,会做自动类型提升。
比如
Object o1 = (false) ? new Double(1.0) : new Integer(2);
System.out.println(o1);
会打印2.0
编辑于 2019-07-07 14:11:52 回复(18)
YL,头像 YL,
三元操作符类型的转换规则:
1.若两个操作数不可转换,则不做转换,返回值为Object类型
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。
4.若两个操作数都是直接量数字,则返回值类型为范围较大者

符合4,所以选D.

发表于 2019-07-13 19:34:00 回复(5)
兄弟们,记得住吗?
byte b = 1;
char c = 1;
short s = 1;
int i = 1;

// 三目,一边为byte另一边为char,结果为int
// 其它情况结果为两边中范围大的。适用包装类型
i = true ? b : c; // int
b = true ? b : b; // byte
s = true ? b : s; // short

// 表达式,两边为byte,short,char,结果为int型
// 其它情况结果为两边中范围大的。适用包装类型
i = b + c; // int
i = b + b; // int
i = b + s; // int

// 当 a 为基本数据类型时,a += b,相当于 a = (a) (a + b)
// 当 a 为包装类型时, a += b 就是 a = a + b
b += s; // 没问题
c += i; // 没问题

// 常量任君搞,long以上不能越
b = (char) 1 + (short) 1 + (int) 1; // 没问题
// i = (long) 1 // 错误

编辑于 2020-07-02 23:04:00 回复(27)
IoE头像 IoE
三元运算符会对两个结果的数据类型,进行自动的类型提升
因此,可以把
Object o1 = true ? new Integer(1) : new Double(2.0);
看作
Object o1 = true new Double(1.0) : new Double(2.0);
编辑于 2019-10-13 11:17:21 回复(2)
记住这个大坑:三元运算符,遇到相同的值类型时,会自动提升精度,也就是说这道题的Integer会跟随Double大哥走了。
发表于 2020-04-26 12:13:45 回复(3)
谁给我翻译翻译,这题为啥选D。!!!
发表于 2019-05-30 10:22:42 回复(4)
来自《阿里巴巴开发手册》
发表于 2020-09-17 19:09:15 回复(1)
Object o1 = true ? new Integer(1) : new Double(2.0);
这个o1不应该是new Integer(1)吗?为什么选D,打印出来是1.0?
发表于 2019-09-09 11:46:01 回复(3)
三目运算会把数据类型提升
发表于 2021-12-09 10:12:16 回复(0)
三元运算符会对两个结果的数据类型,进行自动的类型提升。 因此,可以把 Object o1 = true ? new Integer(1) : new Double(2.0); 看作 Object o1 = true ? new Double(1.0) : new Double(2.0);
发表于 2021-08-06 13:53:37 回复(0)
记住这个大坑:三元运算符,遇到相同的值类型时,会自动提升精度,也就是说这道题的Integer会跟随Double大哥走了。
发表于 2022-09-04 12:37:13 回复(0)
三元远算付两边的类型不一样时,会自动转换为大的,这样理解对吗
发表于 2022-04-20 11:41:26 回复(0)
三元运算符自动提升数据类型
发表于 2022-03-28 08:25:00 回复(0)
三元会自动提升精度
发表于 2021-08-09 11:09:47 回复(0)
记住这个大坑:三元运算符,遇到相同的值类型时,会自动提升精度,也就是说这道题的Integer会跟随Double大哥走了。
编辑于 2021-08-05 12:46:18 回复(0)
三元操作符类型的转换规则:
1.若两个操作数不可转换,则不做转换,返回值为Object类型
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。
4.若两个操作数都是直接量数字,则返回值类型为范围较大者

符合4,所以选D.
发表于 2019-12-31 16:28:33 回复(0)
回字有四种写法
发表于 2022-08-11 10:03:02 回复(0)
三目运算符:遇到可以转换为数字的类型,会做自动类型向上转换。
发表于 2022-06-10 11:12:53 回复(0)
三元运算符自动提升数据类型
发表于 2022-05-11 21:33:13 回复(0)
三元运算符会对两个结果的数据类型,进行自动的类型提升。
发表于 2021-09-15 22:33:31 回复(0)