【问题标题】:How can I use a method to change a value? [duplicate]如何使用方法更改值? [复制]
【发布时间】:2014-08-05 07:49:26
【问题描述】:
class Trial {
static void main() {
    int i = 0;
    change(i);
    System.out.println(i);
}
static void change(int n) {
    n = n + 2;
    }
}

我得到的输出 - 0 我想要的输出 - 2

请帮我更改我的代码。

【问题讨论】:

  • 请记住用您使用的语言标记您的问题。
  • Java 中没有调用 function 而是 methods
  • @RuchiraGayanRanaweera 和 Java 8 lambdas 怎么样?

标签: java methods void


【解决方案1】:

Java 中的一切都是按值传递的: http://www.javaranch.com/campfire/StoryPassBy.jsp

试试这个:

class Trial {
    static void main() {
        int i = 0;
        i = change(i);
        System.out.println(i);
    }
    static int change(int n) {
        return n + 2;
    }
}

编辑

给方法的参数一个值的副本。该值可以是原始值(原始值)或对象引用(对象)。

对于对象,引用的副本意味着您可以在方法中更改对象的状态。你不能做的是改变参数所指的状态。

示例 1:

class Person {
    private String name;
    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public void setName(final String name) {
        this.name = name;
    }
}

Person p = new Person("James");
changeName(p);
System.out.println(p.getName()); // This will output Changed
...
public void changeName(Person person) {
    person.setName("Changed");
}

示例 2:

Person p = new Person("James");
changeName(p);
System.out.println(p.getName()); // This will output James
...
public void changeName(Person person) {
    person = new Person(); // person is now referring to new object, not the one passed
    person.setName("Changed");
}

【讨论】:

  • 这并不完全正确 - 对象通过 引用的副本 传递,因此您可以修改已作为参数传递的对象。您不能做的是修改调用者已经必须使其指向不同对象的引用。
  • @Alnitak 虽然您的评论是有效的,但我在回答中所说的一切都是不正确的。在 Java 中按值传递意味着您在方法调用中获得值的副本 - 该值将是原始值或对象引用。
  • 如果没有限定,读者可能会将“按值传递”理解为对象的在作为参数传递时被复制。
  • @Alnitak 我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 2013-05-06
  • 2021-07-25
相关资源
最近更新 更多