引用考虑下面的继承示例:质疑在Java中
3210我的问题是在注释中。这是不同的,从某种意义上说,使用new
运算符为对象b2
和b2=b1
创建新空间只会将b1
的数据复制到b2
中。因此,对一个对象所做的任何更改都不会影响其他对象。在主内联代码中,B b2 = b1
将指向b2
到分配给b1
的空间。因此,这里的任何更改都会影响对象数据。
我的查询是,会用new
运算符对对象操作有什么区别?
引用考虑下面的继承示例:质疑在Java中
3210我的问题是在注释中。这是不同的,从某种意义上说,使用new
运算符为对象b2
和b2=b1
创建新空间只会将b1
的数据复制到b2
中。因此,对一个对象所做的任何更改都不会影响其他对象。在主内联代码中,B b2 = b1
将指向b2
到分配给b1
的空间。因此,这里的任何更改都会影响对象数据。
我的查询是,会用new
运算符对对象操作有什么区别?
B b1 = new B();
B b2 = b1;
上面的代码创建B
类型的只有一个对象。 b1和b2是指向同一个对象的引用。他们是别名到同一个对象。
B b1 = new B(); //1
B b2 = new B(); //2
b2 = b1; //3
在该代码中,在线路1和2。然而创建B
类型的两个对象,第3行,B2引用相同的对象之后为B1又都是从而再次别名。现在由b2引用的对象现在变为符合垃圾回收的条件。
因此,在这两种情况下,b1和b2指向相同的对象,并且通过这两个引用都可以看到对该对象所做的任何更改。请记住,b1和b2不是对象本身,而只是对象的引用。 b1 = b2不会将任何值从一个对象复制到另一个对象,它只是重新指定引用。
这使得一个A对象和一个B对象。有两个对B对象的引用。
A a1 = new A();
B b1 = new B();
B b2 = b1;
这使得一个A对象和两个B对象。有两个对第一个B对象的引用。第二个B对象不再有对它的引用,并且可用于垃圾收集。
A a1 = new A();
B b1 = new B();
B b2 = new B();
B b2 = b1;
B b2 = b1;
在此步骤中没有任何对象数据被复制。 b2和b1都将指向同一个对象。所以你用它来设置或获取数据并没有什么不同。
B b2 = new B();
B b2 = b1;
b2.setValue("Foo");
b1.getValue(); // would return "Foo"
B b1 = new B()
创建一个新对象和参考分配给它,B1。
B b2 = b1
创建一个新的引用并将其设置为等于b1,这是一个引用。
没有“将b1的数据复制到b2中”。现在两个参考指向相同的基础对象。
没有复制发生。 – whiskeysierra 2010-07-31 10:03:41