【问题标题】:Java changing value of a variable through a method? [duplicate]Java通过方法更改变量的值? [复制]
【发布时间】:2013-05-06 10:01:37
【问题描述】:

您好,我想知道如何将变量作为参数发送给方法,并通过方法对其进行更改。例如

public class Main {
    public static void main(String[] args) {
        int i = 2;
        doThis(i);
        System.out.println(i);  
    }

    public static void doThis(int i) {
        i = 3;
    }
}

我希望它打印出 3 而不是 2。谢谢。

【问题讨论】:

标签: java


【解决方案1】:

java 就是传递值。所以它不会改变你想要的方式。 Read here for more

但是您可以通过以下方式解决此问题

i = doThis(i);

public static int doThis(int i) {
    i = 3;
    return i;
}

【讨论】:

  • 对此感到抱歉,这不应该是反对票。如果您进行编辑,我可以取消投票。
  • 投反对票是偶然的,但当我尝试删除它时,它说它现在已锁定,除非编辑答案,否则无法删除。如果您进行一些琐碎的编辑,我可以删除我的反对票。
  • 你去 - 取消投票。对此感到抱歉。
【解决方案2】:

Java 通过值传递所有内容,因此如果您在类方法中使用赋值运算符,您将不会更改原始对象。

例如:

public class Main {
    public static void main(String[] args) {
        Integer i = new Integer(2);
        setToThree(i);
        System.out.println(i);
    }

    public static void setToThree(Integer i) {
        i = new Integer(3);
    }
}

将打印 2。

话虽如此,如果您在引用中传递的对象是可变的,您可以按照您的想法对其进行更改。

例如:

public class Main {
    public static void main(String[] args) {
        MyMutableInt i = new MyMutableInt(2);
        setToThree(i);
        System.out.println(i);
    }        

    public static void setToThree(MyMutableInt i) {
        i.set(3);
    }
} 

这将打印 3(假设 MyMutableInt 有一个正确的 toString() 方法)。

当然,Java 整数是不可变的,因此没有能力像那样被更改。所以你在这里有两个选择:

注意:这不适用于任何类型的原语。为此,您将不得不通过返回值传回。如果你有多个值要改变,你必须将它们包装在一个对象中才能返回,所以你也可以使用这个方法。

【讨论】:

    【解决方案3】:

    Java 是按值传递原始数据类型或对象的。
    引用数据类型参数,例如对象,也是按值传递给方法的。

    【讨论】:

      【解决方案4】:

      Java 无法做到这一点。但是,您可以从方法中返回值...

      public static int doThis(int i) {
          return 3;
      }
      

      然后重新分配它...

      int i = 2;
      i  = doThis(i);
      

      【讨论】:

      • 是的,我就是这么想的。嗯...最近做的C太多了。
      • 嗯,不知道为什么这得到了赞成,因为该方法仍然返回 void。
      • 您可以创建一个对象,允许方法获取和设置 int 值(在对象内部),这将允许您修改 int 值,您只需修改对象本身跨度>
      • @camickr 很高兴看到有人关注
      【解决方案5】:

      我希望它打印出 3 而不是 2

      改变方法返回值

      int i = 2;
      i = doThis(i);
      
      
      public static int doThis(int i) {
          i = 3;
          return i;
      }
      

      它将原语的值从调用者复制到参数

      【讨论】:

      • +1,第一个通过修改方法签名返回值。
      猜你喜欢
      • 2010-10-04
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 2017-01-25
      • 1970-01-01
      • 2014-10-16
      • 2015-06-01
      相关资源
      最近更新 更多