对\'var\'关键字和三元运算符?的疑问:

问题描述

|| 如果在编译时解析了“ 0”关键字,那么以下内容如何工作?
class A {
}
class B : A {
}

int k = 1;
var x = (k < 0) ? new B() : new A();
编辑: 我终于明白,问题不在于ѭ0本身,而是关于
?:
运算符的行为。出于某种原因,我认为可能会发生以下情况:
object x = something ? 1 : \"\"
那根本不可能:)   相关问题(关于三元运算符):   为什么在三元运算符中分配null失败:null和int之间没有隐式转换?     

解决方法

        结果为
A
类型,因为两个变量均为
A
类型,并且至少其中一个变量直接为
A
类型(而不是通过某种转换)。 编译器查看三元表达式的两个部分,如果其中一个是另一个的子类型,则整个表达式将成为更通用的超类型。 但是,如果两者都不是通用类型,那么就会发生编译器错误,可能是因为它不知道需要为您升级多少(也不希望找出来)。 看这里:   条件运算符(?:)根据布尔表达式的值返回两个值之一。以下是条件运算符的语法。
condition ? first_expression : second_expression;
     [...]      first_expression和second_expression的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。     ,        结果是
A
。一种简单的确认方法是将鼠标放在
var
上。     ,        我还没有测试过这种退化的情况。但我敢打赌,要么(1)编译器抱怨,要么(2)\'x \'类型为\'A \'。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...