почему нельзя изменить значение переменной примитивного типа? - PullRequest
0 голосов
/ 15 мая 2009
    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);
  }
}

почему с не изменилось?

Ответы [ 6 ]

5 голосов
/ 15 мая 2009
4 голосов
/ 15 мая 2009

Java передает параметры по значению (поэтому в методе создается копия значения и используется локально).

Для примитивного типа - c в вашем случае - значением является значение c, поэтому вы используете копию значения c, и вы не меняете c

Для объекта значение является значением ссылки, поэтому даже если вы передадите его по значению (скопируйте), оно все равно ссылается на тот же объект, и вы можете изменить объект, используя свою копию ссылки ...

2 голосов
/ 15 мая 2009

Поскольку примитивные параметры передаются по значению в метод, и поэтому значение, которое вы изменяете , является локальным для метода.

Вы, вероятно, хотите

c = thistest.getA()

, где getA() возвращает значение a.

0 голосов
/ 15 мая 2009

Значение c в методе изменяется, а затем отбрасывается.

0 голосов
/ 15 мая 2009

Примитивные типы данных передаются по значению, а не по ссылке, это означает, что c, который вы получаете в «trytoequal», является переменной, область действия которой находится только внутри метода, а его значение является копией параметра метода.

0 голосов
/ 15 мая 2009

В java параметры передаются по значению, а не по ссылке, поэтому то, что вы делаете в «trytoequal», не будет работать.

См. Эти пояснения к значению переменных Java: http://www.yoda.arachsys.com/java/passing.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...