为何仅能通过类构造方法参数复制基本数据类型?
聊聊Java构造方法里引用类型和基本类型的赋值区别
刚入门Java的时候,很多人都会被引用类型和基本类型的赋值逻辑搞懵,我拿两个实际代码例子给你拆解下:
1. 引用类型的赋值逻辑(以ImageView为例)
先看这段代码:
class Example { public ImageView imageView; public Example(ImageView imageView) { // 假设传入的imageView已经完成初始化 this.imageView = imageView; } }
这里要划重点:this.imageView并没有创建一个新的ImageView实例,它只是指向了构造方法参数传入的那个ImageView对象。简单说,外部的ImageView和当前Example对象里的imageView是同一个“东西”,如果你改了其中一个的属性,另一个也会同步变化。
2. 基本类型的赋值逻辑(以int为例)
再看这段基本类型的代码,逻辑就完全不同了:
class Example { public int i; public Example(int i) { this.i = i; } }
这里的this.i = i是实打实的值复制——把参数i的数值拷贝了一份,赋值给当前Example对象的i属性。外部的int变量和对象里的i是完全独立的两个变量,修改其中一个对另一点影响都没有。
补充:关于String类的特殊情况
你提到了String类,它虽然属于引用类型,但因为是不可变类,所以表现出来的行为有时候会让你误以为是值传递。比如你给String变量赋值新内容时,其实是生成了一个新的String对象,而不是修改原来的对象,这才造成了“像值复制”的错觉,但本质上它还是引用传递的逻辑。
内容的提问来源于stack exchange,提问作者panarama
相关产品推荐
相关产品推荐

