You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的赋值操作是右向左结合的,执行逻辑如下:

  1. 先执行x = 50:由于方法内没有提前声明局部变量x,这里的x直接指向类的成员变量,将成员变量x的值修改为50
  2. 再把x的当前值(50)赋值给新声明的局部变量a
  3. 同理,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:15:09