为什么Java中可以给括号赋值?

F__*_*___ -4 java

我正在查看Tomcat的Java源代码,发现了这样的代码

String a = ("aa");
int b = (1);
Run Code Online (Sandbox Code Playgroud)

它编译成功,而通常分配应该是

String a = "a";
int b = 1;
Run Code Online (Sandbox Code Playgroud)

为什么第一段代码可以编译成功?

And*_*ner 6

从语法上讲,这些不是赋值:它们是带有初始值设定项的变量声明。(然而,就 而言,这并不是那么重要的区别())。

带有初始值设定项的变量声明的(简化)形式是:

Type name = expression;
Run Code Online (Sandbox Code Playgroud)

任何兼容类型的表达式都可以出现在等号的右侧。

()形成一个带括号的表达式。从语言规范来看:

带括号的表达式是主表达式,其类型是所包含表达式的类型,并且其运行时值是所包含表达式的值。

因此,它的值与括号中的值相同。

在这种情况下,没有任何理由使用(),但它们不会改变代码的含义。