为什么不能改变原始类型变量的值?

时间:2009-05-15 11:13:07

标签: java

    public class testtype
{
  private   int a;
  private double b;

   testtype(int a,double b)
  {
    this.a=a;
    this.b=b;
  }

  public void maketoequal(testtype oo)
  {
    oo.a=this.a;
    oo.b=this.b;
  }

  void trytoequal(int c)
  {
    c=this.a;
  }

  public static void main(String[] args)
  {
    testtype t1,t2;
    t1=new testtype(10,15.0);
    t2=new testtype(5,100.0);
    t1.maketoequal(t2);
    System.out.println("after the method is called:"+"\n"+"the value of a for t2 is:"+t2.a
    +"\n"+"the value of b for t2 is :"+t2.b);
    int c=50;
    t1.trytoequal(c);
    System.out.println("the value of c after the method be called is:"+c);
  }
}

为什么c没有改变?

6 个答案:

答案 0 :(得分:5)

答案 1 :(得分:4)

Java按值传递参数(因此在方法中本地创建并使用该值的副本。)

对于原始类型 - 在您的情况下为c - ,该值是c的值,因此您使用c值的副本并且不更改c

对于一个对象,value是引用的值,所以即使你按值传递它(复制它)它仍然引用相同的对象,你可以使用你的引用副本来改变对象...

答案 2 :(得分:2)

因为原始参数会传递给by value方法,因此您更改的值是方法的本地

你可能想要

c = thistest.getA()

其中getA()返回a。

的值

答案 3 :(得分:0)

在java中,参数是按值传递的,而不是通过引用传递的,因此您在“trytoequal”中所做的操作将无效。

请参阅有关java变量值的这些说明:http://www.yoda.arachsys.com/java/passing.html

答案 4 :(得分:0)

原始数据类型按值传递,而不是通过引用传递,这意味着您在“trytoequal”中获得的c是一个变量,其范围就在方法内,其值是方法参数的副本。

答案 5 :(得分:0)

方法中c的值被更改,然后被丢弃。