【发布时间】:2020-02-08 09:03:00
【问题描述】:
我对 Java 是如何按值传递的,以及将对象传递给方法如何改变对象的字段(例如 Car 类中的 change1())有所了解。
但是,我的问题是为什么 change2() 和 change3() 没有改变任何东西(尤其是 change3())
public class question {
public static void main(String[] args)
{
Car c1 = new Car(1000,"Hyundai");
Car c2 = new Car(2000,"BMW");
c1.change3(c1);
c1.change3(c2);
System.out.println(c1.name + " "+ c1.price );
System.out.println(c2.name + " " + c2.price);
}
}
class Car
{
int price;
String name;
Car(int p , String n)
{
this.price=p;
this.name=n;
}
void change1(Car c)
{
c.price=0;
c.name="Changed";
}
void change2(Car c)
{
c = new Car(999,"Honda");
}
void change3(Car c)
{
c = new Car(888,"Audi");
c.price=80;
c.name="xxx";
}
}
【问题讨论】:
-
我已经阅读了关于通过引用传递和通过值传递以及从堆中创建空间的新方法,但我不知道发生了什么......
标签: java parameter-passing new-operator