当我将变量传递给我的方法时,它们不会在主代码中更新,而只会传递给方法。如何做到这一点,一旦传递变量将在主代码中更新?谢谢!
//////////// here is main code:
public static class MyCoding extends MainScreen{ static int mee=1;
public static void myCode(){
Status.show("mee="+mee, 2000); // shows me=1
Moo.moo(mee);
Status.show("mee="+mee, 2000);// should be mee=76547545 but still shows mee=1 !
}
}
//////////// here is my method:
public static class Moo extends MainScreen{
public static void moo(int bee){
mee=76547545;
return;
}
}
怎么办?谢谢!
答案 0 :(得分:8)
传递原始数据类型参数
传递原始参数,例如int或double 方法的价值。这意味着对值的任何更改 参数仅存在于方法的范围内。当方法 返回,参数消失,对它们的任何更改都将丢失。
传递参考数据类型参数
也会传入参考数据类型参数,例如对象 方法的价值。这意味着当方法返回时, 传入引用仍引用与以前相同的对象。 但是,可以在中更改对象字段的值 方法,如果他们有适当的访问级别。
要获得您期望的行为,您需要返回一个值并将其分配给原始变量。
mee = Moo.moo(mee);
在你的方法中:
public static int moo(int mee)
{
// some processing
mee += 76547545;
return mee;
}
答案 1 :(得分:4)
Java方法参数为pass-by-value
,因此您无法获得更新的值。您需要使用int字段创建一个类,并将对象引用作为参数传递。
public class IntData
{
public int bee;
}
在MyCoding和Moo中,
public static class MyCoding extends MainScreen{
static IntData mee=new IntData();
public static void myCode(){
mee.bee=1;
Status.show("mee="+mee.bee, 2000);
Moo.moo(mee); //object reference will be copied
Status.show("mee="+mee.bee, 2000);
}
}
public static class Moo extends MainScreen{
public static void moo(IntData ref){
ref.bee=76547545;
}
}
答案 2 :(得分:3)
Java通过复制它们的VALUE将原语(ints / floats / strings)传递给方法。另一方面,传递给方法时不会复制其他OBJECTS(即,其他对象保持状态,并且可以通过外部方法进行修改)。
java中没有C风格指针的概念,因此您通常不会在java方法中覆盖整数值 - 而是将整数设置为方法中发生的计算结果。或者,更常见的是,您定义对象,并在这些对象中使用getter和setter来获取/设置值。
在你的情况下......你必须要么(1)将你在方法中计算的整数声明为全局变量,或者(2)将计算出的值返回给调用类,并在最初的类中进行设置声明/访问感兴趣的变量。
1)你可以制作" mee"变量静态,全局变量,并在任何地方编辑
或
2)你可以编辑" moo" RETURN一个整数的方法,并将mee方法设置为返回的值。
答案 3 :(得分:1)
首先,我找不到任何变量bee
,我认为你的意思是mee
。
只需将当前对象传递为this
//////////// here is main code:
public static class MyCoding extends MainScreen{
private int mee=1;
private int beee=1;
private int cee=1;
public void myCode(){
Status.show("mee="+this.mee, 2000); // shows me=1
Moo.moo(this); // small change here
Status.show("mee="+this.mee, 2000);// should be mee=76547545 but still shows mee=1 !
}
}
//////////// here is my method:
public static class Moo extends MainScreen{
public static void moo(MyCoding obj){
obj.bee=76547545;
obj.mee = 67798879;
obj.cee =89789;
}
}
答案 4 :(得分:1)
在你的代码中
static int mee=1;
并尝试更改
mee=76547545;
两者都不同。当您将变量声明为 static 时,该变量必须在其他类中由 ClassName 调用。你跟着纠正了。
Moo.moo(mee);
将 mee = 76547545; 行更改为
MyCoding.mee=76547545;
然后运行code.Enough;
答案 5 :(得分:0)
答案很简单,你没有将值分配给我
试试这个
mee = Moo.moo(bee);