java 中的条件 if-else 语句
Conditional if-else statement in java
我无法理解下面的代码如何打印 50.0
public class Pre
{
public static void main(String[] args)
{
int x=10;
System.out.println((x > 10) ? 50.0 : 50); //output 50.0
}
}
它应该打印 50(我猜)而不是 50.0
上面的代码是不是等同于下面的代码?,
public class Pre
{
public static void main(String[] args)
{
int x=10;
if(x>10)
System.out.println(50.0);
else
System.out.println(50);//output
}
}
如果它们是等价的,那么为什么输出不同?
三元条件运算符的类型 - (x > 10) ? 50.0 : 50)
由第二个和第三个操作数共同确定。在你的例子中,它必须能够包含 50.0
和 50
的值,所以它的类型是 double
.
因此,即使表达式 returns 50
,它也被强制转换为 double,你会看到 50.0
.
如果你改变
System.out.println((x > 10) ? 50.0 : 50);
至
System.out.println((x > 10) ? 50.0 : 10);
您会看到 10.0
被打印出来,这很明显返回了正确的值(:
的右侧)。
Java 确保你的类型是连贯的,所以在第一个语句中
(x > 10) ? 50.0 : 50
你先有一个double,所以表达式的return类型是double,将litteral int转为double。因此条件的两侧是相同的!
如果改成
System.out.println((x > 10) ? 50.0 : 49);
它打印 49.0.
if/else 不是表达式,因此不需要进行任何转换。
它打印 50.0 因为在第一种情况下你调用了 OutputStream.println(double)
方法,因为你的第一个表达式 returns 是 double
而不管你的条件如何。
但在第二种情况下,您正在调用 OutputStream.println(int)
方法。
我无法理解下面的代码如何打印 50.0
public class Pre
{
public static void main(String[] args)
{
int x=10;
System.out.println((x > 10) ? 50.0 : 50); //output 50.0
}
}
它应该打印 50(我猜)而不是 50.0
上面的代码是不是等同于下面的代码?,
public class Pre
{
public static void main(String[] args)
{
int x=10;
if(x>10)
System.out.println(50.0);
else
System.out.println(50);//output
}
}
如果它们是等价的,那么为什么输出不同?
三元条件运算符的类型 - (x > 10) ? 50.0 : 50)
由第二个和第三个操作数共同确定。在你的例子中,它必须能够包含 50.0
和 50
的值,所以它的类型是 double
.
因此,即使表达式 returns 50
,它也被强制转换为 double,你会看到 50.0
.
如果你改变
System.out.println((x > 10) ? 50.0 : 50);
至
System.out.println((x > 10) ? 50.0 : 10);
您会看到 10.0
被打印出来,这很明显返回了正确的值(:
的右侧)。
Java 确保你的类型是连贯的,所以在第一个语句中
(x > 10) ? 50.0 : 50
你先有一个double,所以表达式的return类型是double,将litteral int转为double。因此条件的两侧是相同的!
如果改成
System.out.println((x > 10) ? 50.0 : 49);
它打印 49.0.
if/else 不是表达式,因此不需要进行任何转换。
它打印 50.0 因为在第一种情况下你调用了 OutputStream.println(double)
方法,因为你的第一个表达式 returns 是 double
而不管你的条件如何。
但在第二种情况下,您正在调用 OutputStream.println(int)
方法。