Java中一行多变量赋值与逐行声明的差异及行为解析
Java中“单行单变量声明”与“单行多变量赋值”的行为差异解析
这两种写法存在本质差异,核心区别在于变量的作用域指向和赋值操作的目标对象:
第一种场景:单行声明局部变量
对应代码:
int x = 50; int y = 40; int a = 50; int b = 40;
这里的x和y是在getData()方法内声明的局部变量,它们会屏蔽(shadow)类的成员变量x和y。此时:
- 直接调用
x、y时,访问的是局部变量,值为50和40,所以x + y输出90 this.x、this.y明确指向类的成员变量,初始值为10和20,所以this.x + this.y输出30
第二种场景:单行多变量赋值
对应代码:
int a = x = 50; int b = y = 40;
Java的赋值操作是右向左结合的,执行逻辑如下:
- 先执行
x = 50:由于方法内没有提前声明局部变量x,这里的x直接指向类的成员变量,将成员变量x的值修改为50 - 再把
x的当前值(50)赋值给新声明的局部变量a - 同理,
y = 40直接修改类的成员变量y的值为40,再赋值给局部变量b
此时:
- 局部变量
a、b的值为50和40,a + b输出90 - 方法内无局部变量
x、y,直接调用x、y时访问的是已被修改的成员变量,值为50和40,所以x + y输出90 this.x、this.y指向的成员变量已经被修改为50和40,所以this.x + this.y输出90
总结:单行声明局部变量会创建方法内的局部变量并屏蔽成员变量;而单行多变量赋值如果未提前声明局部变量,会直接修改类的成员变量。
内容的提问来源于stack exchange,提问作者Dcode78
相关产品推荐
相关产品推荐

