我无法在下面的函数中添加一个整数,它仍会打印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;
}
}
答案 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中,原始类型和字符串是不可变的。这里X
为Integer
。
因此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);