不能通过函数向变量传递添加一个

时间:2014-07-09 11:15:59

标签: java

我无法在下面的函数中添加一个整数,它仍会打印5.有人可以解释一下吗?

public class HelloWorld {
    public static void main(String[] args) {
        int x = 5;
        System.out.print('Hello world~~~~~');
        for(int i = 0; i < args.length; i++) { 
            System.out.println(args[i]);
        }
        System.out.println(Runtime.getRuntime().maxMemory());
        System.out.println(Runtime.getRuntime().totalMemory());
        System.out.println(Runtime.getRuntime().freeMemory());
        OnePlusNumber(x);
        System.out.println(x);      

        Date date = new Date();
        System.out.println(date);       
    }

    private static Integer OnePlusNumber(int number) {
        number += 1;        
        return number;
    }
}

6 个答案:

答案 0 :(得分:3)

您没有指定您返回的值。更改以下行:

 OnePlusNumber(x);

x = OnePlusNumber(x);

答案 1 :(得分:1)

更改

OnePlusNumber(x);

x=OnePlusNumber(x);

它会再次将方法返回的值赋给x变量,因为它是原始数据类型(int)。

如果传递的参数是类的对象,则不必像这样分配它。当引用传递给方法时,相同对象的状态会发生变化 -

表示前 -

Employee emp=new Employee();
emp.setName("A");

changeEmpName(emp);


public void changeEmpName(Employee employee){
 employee.setName("B");
}

然后员工姓名变为B.

此方法将更改原始emp对象,因为它的引用已通过。

答案 2 :(得分:1)

你必须改变你的代码:

OnePlusNumber(x);

应该是

x = OnePlusNumber(x);

所以你有返回值。

你的方法应该返回一个int:

  private static int OnePlusNumber(int number){

答案 3 :(得分:0)

函数OnePlusNumber(x);返回一个Integer。

将其替换为x = OnePlusNumber(x);

答案 4 :(得分:0)

Java使用引用。当你将x传递给OnePlusNumber时。它传递x的引用,但在java中,原始类型和字符串是不可变的。这里XInteger。 因此number+=1会创建新的Integer。但原始函数中的X是指旧的x

这就是你需要指定返回值的原因。

x = OnePlusNumber(x);

http://en.wikipedia.org/wiki/Primitive_wrapper_class

http://docs.oracle.com/javase/tutorial/java/data/numberclasses.html

还阅读了

http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

答案 5 :(得分:0)

这是Java和C之间的主要区别。例如,在你的情况下你不发送确切的项目x你是jsut发送它的“副本”到函数,所以函数的结果不修改x的地址只是复制对象x的本地值。

解决此问题的最常见方法是将函数的结果分配给x

 x=OnePlusNumber(x);