我正在查看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)
为什么第一段代码可以编译成功?
从语法上讲,这些不是赋值:它们是带有初始值设定项的变量声明。(然而,就 而言,这并不是那么重要的区别())。
带有初始值设定项的变量声明的(简化)形式是:
Type name = expression;
Run Code Online (Sandbox Code Playgroud)
任何兼容类型的表达式都可以出现在等号的右侧。
()形成一个带括号的表达式。从语言规范来看:
带括号的表达式是主表达式,其类型是所包含表达式的类型,并且其运行时值是所包含表达式的值。
因此,它的值与括号中的值相同。
在这种情况下,没有任何理由使用(),但它们不会改变代码的含义。