我试图改变java中的变量值? 以下代码有效,它将x,y值从0更改为100:
public void tricky(Point arg1)
{
arg1.x = 100;
arg1.y = 100;
}
public static void main(String [] args)
{
Point pnt1 = new Point(0,0);
System.out.println("X: " + pnt1.x + " Y: " +pnt1.y);
tricky(pnt1);
System.out.println("X: " + pnt1.x + " Y:" + pnt1.y);
}
但为什么下面的代码不起作用?
public class Solution {
public static void tricky(int arg1)
{
arg1 = 100;
}
public static void main(String [] args)
{
int pnt1 = 0;
System.out.println(pnt1);
tricky(pnt1);
System.out.println(pnt1);
}
}
答案 0 :(得分:1)
Java是一种值传递语言。传递给方法的变量不能通过该方法超出方法范围而更改。
答案 1 :(得分:0)
public static void tricky(int arg1)
{
arg1 = 100;
}
arg1
是您为此方法提供的值的副本。它不是实际变量,而是它的值的副本。
在
的情况下public void tricky(Point arg1)
{
arg1.x = 100;
arg1.y = 100;
}
使用引用发送Object并修改其类变量。因此,您实际上是在修改值,而不是它的副本。
然而,为了证明这种差异,
public void tricky(Point arg1)
{
Point arg2 = new Point(50,50);
arg1 = arg2;
}
您提供方法的变量不会在此方法之外更改。只有当你说
时才能这样做arg1 = tricky(arg1);
public Point tricky(Point arg1)
{
Point arg2 = new Point(arg1.x / 2, arg1.y / 2);
return arg2;
}
Aka将新值作为返回值返回。