Java 为什么可以';我是否使用复合赋值将多个变量设置为null?

Java 为什么可以';我是否使用复合赋值将多个变量设置为null?,java,Java,众所周知,你会写作 int a; int b; b = a = 3; 但是我想写信 foo f; bar b; f = b = null; 这在语法上是无效的。大概是因为null在分配给b时有一个与其关联的类型,并且即使引用的值为null,该类型也不能分配给f。这是正确的吗?除了明显的f=null之外,还有其他选择吗;b=零?您在这里得到一个错误,因为f和b属于不同的类型(foo和bar),您不能将b分配给f foo f; foo b; f = b = null; 如果工作不正确,

众所周知,你会写作

int a;
int b;
b = a = 3;
但是我想写信

foo f;
bar b;    
f = b = null;

这在语法上是无效的。大概是因为
null
在分配给
b
时有一个与其关联的类型,并且即使引用的值为
null
,该类型也不能分配给
f
。这是正确的吗?除了明显的
f=null之外,还有其他选择吗;b=零

您在这里得到一个错误,因为
f
b
属于不同的类型(
foo
bar
),您不能将
b
分配给
f

foo f;
foo b;
f = b = null;

如果工作不正确,您不能像这样链接作业,因为
Foo
不是
条。但是,这比您的示例还要短

Foo f = null;
Bar b = null;

你的两个片段并不完全相似。更好的模拟是:

int a;
double b;
a = b = 3;  // error
这会产生同样的错误。导致问题的原因是
f
b
的类型不同,而不是分配
null
。具体地说,
(b=null)
的类型是
,这与
foo
的赋值不可比


您可能最好执行单独的赋值。

可能是因为null在赋值给b时有一个与其关联的类型,并且即使引用的值不完全为null,也不能将该类型赋值给f。其背后的原因是您试图将
b
分配给
f
,但
b
f
的类型不同。这就像说香蕉=土豆,但它们是两种完全不同的水果。简单而正确+1。虽然我想知道你是否可以像
f=((foo)b=null)
那样强制转换赋值。当然不可取,但是possible@Rogue仅当它是合法演员阵容时(例如foo extends bar)。