如何在java中改变变量值?为什么有些工作,有些失败?

时间:2014-09-30 08:35:44

标签: java

我试图改变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); 
    }
}

2 个答案:

答案 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将新值作为返回值返回。