java-传递现有数组产生的结果与传递带有该数组之外的元素的新数组所产生的结果不同

java-传递现有数组产生的结果与传递带有该数组之外的元素的新数组所产生的结果不同,第1张

概述我正在为Android编写游戏.游戏元素的颜色是通过存储RGBA值的ColorTheme对象设置的.在初始化时一个三角形,将ColorTheme对象中具有RGBA值的数组传递给构造函数.尽管ColorTheme-Object中的颜色在初始化后从未改变,但三角形的颜色却没有改变.我试图找出原因.我注意到,如果通过带有Col

我正在为Android编写游戏.游戏元素的颜色是通过存储RGBA值的colortheme对象设置的.
在初始化时一个三角形,将colortheme对象中具有RGBA值的数组传递给构造函数.
尽管colortheme-Object中的颜色在初始化后从未改变,但三角形的颜色却没有改变.我试图找出原因.
我注意到,如果通过带有colortheme-Array中的元素的新Array而不是将colortheme对象本身传递给Triangle构造函数,则它的工作原理与我想要的一样.这真的没关系,因为Java中没有诸如指针之类的东西(对吗?).

@OverrIDepublic voID onSurfaceChanged(GL10 gl10, int wIDth, int height) {//...mthemes = new colortheme[]{            new colortheme(                    new float[]{0.20f, 0.71f, 0.91f, 1.00f},    // blue circle                    new float[]{1.00f, 1.00f, 1.00f, 1.00f},    // white obstacle                    new float[]{1.00f, 1.00f, 1.00f, 1.00f},    // white triangle                    new float[]{0.00f, 0.60f, 0.80f, 1.00f}     // shadow            ),            new colortheme(                    new float[]{0.27f, 0.40f, 0.80f, 1.00f},    // purple circle                    new float[]{1.00f, 1.00f, 1.00f, 1.00f},    // white obstacle                    new float[]{1.00f, 1.00f, 1.00f, 1.00f},    // white triangle                    new float[]{0.60f, 0.20f, 0.80f, 1.00f}     // shadow            ),            new colortheme(                    new float[]{0.60f, 0.80f, 0.00f, 1.00f},    // green circle                    new float[]{1.00f, 1.00f, 1.00f, 1.00f},    // white obstacle                    new float[]{1.00f, 1.00f, 1.00f, 1.00f},    // white triangle                    new float[]{0.40f, 0.60f, 0.00f, 1.00f}     // shadow            )    };//...// Values keep changing after initialization like this    mShadowTriangle = new Triangle(mScreenRatio, mthemes[outerthemeIndex].theme[3],true);// They don't like this mShadowTriangle = new Triangle(mScreenRatio, new float[]{mthemes[outerthemeIndex].theme[3][0],mthemes[outerthemeIndex].theme[3][1],mthemes[outerthemeIndex].theme[3][2],mthemes[outerthemeIndex].theme[3][3]},true);}

解决方法:

本身并没有指针这样的东西,但是仍然存在对象引用,它们的行为类似于指针(除了它们不允许指针算术).这意味着世界之间存在所有差异

new Blah(x);

new Blah(copyOfX);

每次,如果这些是我们在谈论的对象,它们都会通过引用传递.这意味着,如果Blah的构造函数决定对传递给它的对象进行修改,则第一个将以x被修改而结束,但是第二个将不被修改,因为仅副本将被修改.

最重要的是,如果您有一个不想弄乱的数组,并且将其传递给可能修改它得到的数组的代码,那么您希望传递一个克隆而不是原始副本.

如果您具有原始数组(例如int []),则可以使用

int[] copyOfX = Arrays.copyOf(x, x.length);

获得克隆.但是请注意,如果数组的元素本身是对象,那么这将为您提供浅表副本(然后您将需要查找浅表副本和深表副本之间的差异).

总结

以上是内存溢出为你收集整理的java-传递现有数组产生的结果与传递带有该数组之外的元素的新数组所产生的结果不同全部内容,希望文章能够帮你解决java-传递现有数组产生的结果与传递带有该数组之外的元素的新数组所产生的结果不同所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1088193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存