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

为何修改PVector对象b后,对象a的值变为(7,8)?

为什么修改PVector b会影响到PVector a?

这是个非常典型的对象引用问题,在Java(Processing基于Java)环境里,像PVector这类对象类型的变量,存储的并不是对象本身的数据,而是指向内存中该对象的"引用地址"。

当你执行PVector b = a;这行代码时,你并没有复制出一个全新的PVector对象,只是让变量b和a共享了同一个对象的引用——简单说就是,a和b现在都指着内存里同一个(5,6)的向量对象。

所以后面你调用b.add(new PVector(2,2))的时候,本质上是通过b这个引用,去修改了它指向的那个唯一的向量对象。这时候用a去打印,当然会看到修改后的结果,因为a指向的也是同一个对象呀!

举个直观的例子:假设a是一把钥匙,开着一个装着(5,6)的箱子。你执行b = a,其实是复制了一把钥匙给b,两把钥匙开的是同一个箱子。你用b钥匙打开箱子把里面的数改成了(7,8),再用a钥匙打开,看到的当然也是修改后的内容。

如果想要让b成为独立的向量,修改它不影响a,你需要创建一个新的PVector对象,比如用copy()方法:

PVector a = new PVector(5,6);
PVector b = a.copy(); // 复制a的内容到新的PVector对象里
b.add(new PVector(2,2));
print(a); // 现在会输出(5,6),因为b修改的是自己的独立对象

或者也可以直接通过构造函数新建:

PVector b = new PVector(a.x, a.y);

补充一句:Java里的基本数据类型(比如int、float)是值传递,赋值时会直接复制数值,所以不会出现这种问题,但所有对象类型(包括自定义类、PVector、ArrayList这些)都是引用传递,赋值时传递的是对象的引用地址,这点一定要注意哦!

内容的提问来源于stack exchange,提问作者martinstacey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:28:55