我正在查看tomcat的Java源代码,发现了这样的代码
String a = ("aa");
int b = (1);
它编译成功,通常分配应该是
String a = "a";
int b = 1;
为什么第一段代码编译成功?
答案 0 :(得分:3)
从语法上讲,这些不是赋值:它们是带有初始化程序的变量声明。 (不过,就()
而言,区别并不重要)。
带有初始化程序的变量声明的(简化)形式为:
Type name = expression;
任何兼容类型的表达式都可以出现在等号的右侧。
()
生成一个带括号的表达式。来自the language spec:
带括号的表达式是主表达式,其类型是所包含表达式的类型,并且在运行时其值是所包含表达式的值。
因此,它的值与括号中的值相同。
在这种情况下,没有任何理由使用()
,但是它们不会改变代码的含义。