标题: 想不明白的一个地方 [打印本页] 作者: 赵方明 时间: 2012-6-4 21:45 标题: 想不明白的一个地方 class CarDemo
{
public static void main(String[] args)
{
Car c=new Car();
c.num=5;
Car c1=c;
c1.color="green";
c.run();
}
}
class Car
{
//描述颜色
String color="red";
//描述轮胎数
int num=4;
//描述行为
public void run()
{
System.out.println(num+"::"+color);
}
}
class CarDemo
{
public static void main(String[] args)
{
Car c=new Car();
c.num=5;
Car c1=new Car();
c1=c;
c1.color="green";
c.run();
}
}
class Car
{
//描述颜色
String color="red";
//描述轮胎数
int num=4;
//描述行为
public void run()
{
System.out.println(num+"::"+color);
}
}
前者输出时5::green,前者在堆内存中只有一个对象,当Car c1=c时,是将c中建立的对象的地址给了c1,
那么在c1.color=”green“改的是c中建立的对象的颜色。
后者在Car c1=new Car();时在对内存中建立了一个新的对象,当c1.color="green"改的是c1中的颜色,c中颜色未变。
为什么c.run()打印结果也是5::green?作者: 杨海波 时间: 2012-6-4 22:16
首先 你在描述car属性的时候num=4 color为red,
class Car
{
//描述颜色
String color="red";
//描述轮胎数
int num=4;
//描述行为
接着 你建立了Car c 对象并且将num的值改为5,之后又建立了Car c1对象然后
把c的地址值传给了c1 到这里 c的属性为num=5,color=red.之后你将c1的color属性改为green,而这2个对象引用是相同的
意思就是由于c1=c所以他们引用指向同一组数据,你改变c1之后,c肯定会跟着改变的。他们储存的地址值是一样的。
所以 输出的结果是5和green