我有一个方法可以将纹理更改为另一个随机纹理。
public void Texturechange(Texture texture){
String imagename;
randomImage = random.nextInt(90)+1;
if ( randomImage <10){
imagename="00"+ randomImage +".jpg";
} else if(randomImage >9) {
imagename="0"+ randomImage +".jpg";
}
Texture newTexture = new Texture(imagename);
texture = newTexture;
}
打印结果后,我看到纹理已更改为newTexture,但屏幕上没有更新。但是,以下代码确实在屏幕上更新,任何人都可以告诉我原因吗?
public void Texturechange(Texture texture){
String imagename;
randomImage = random.nextInt(90)+1;
if ( randomImage <10){
imagename="00"+ randomImage +".jpg";
} else if(randomImage >9) {
imagename="0"+ randomImage +".jpg";
}
Texture newTexture = new Texture(imagename);
if(texture== theNameOfTextureInput){
theNameOfTextureInput=newTexture;
}
}
答案 0 :(得分:1)
因为Java是pass by value,所以在第一种情况下更改方法参数texture
的引用不会更改传递给方法的原始引用。换句话说,分配texture = newTexture;
将不更改方法调用方传递的原始texture
。
在第二种情况下,您将newTexture
分配给该类的字段 theNameOfTextureInput
(我说这是一个字段,因为该变量未在方法)。只要方法可以访问该字段并且更改将反映在整个类(或对象取决于字段是否为静态),您可以从任何方法更改字段(为其指定新引用)。 / p>