如何更新变量,传递给方法?

时间:2011-12-15 03:37:45

标签: java

当我将变量传递给我的方法时,它们不会在主代码中更新,而只会传递给方法。如何做到这一点,一旦传递变量将在主代码中更新?谢谢!

//////////// 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;
    }
}

怎么办?谢谢!

6 个答案:

答案 0 :(得分:8)

传递原始数据类型参数

  

传递原始参数,例如int或double   方法的价值。这意味着对值的任何更改   参数仅存在于方法的范围内。当方法   返回,参数消失,对它们的任何更改都将丢失。

传递参考数据类型参数

  

也会传入参考数据类型参数,例如对象   方法的价值。这意味着当方法返回时,   传入引用仍引用与以前相同的对象。   但是,可以在中更改对象字段的值   方法,如果他们有适当的访问级别。

要获得您期望的行为,您需要返回一个值并将其分配给原始变量。

mee = Moo.moo(mee);

在你的方法中:

public static int moo(int mee)
{
   // some processing
   mee += 76547545;

   return mee;
}

Passing Information to a Method or a Constructor

答案 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);