本文收集整理关于java对象引用对象赋值的相关议题,使用内容导航快速到达。
内容导航:
Q1:java子类对象赋值给父类对象的问题
兄弟,完全正确,……你是牛人,不过还是帮我加分吧先,这是一种常见的手法,
Q2:Java中请问将一个对象赋值给另一个同类对象,这两个对象是否指向同一堆内存?
对象是引用类型的,所以如果你把一个对象赋值给另一个变量,它实际上只是把内存地址赋值了,
这就比如 你知道xxx家的地址,然后你告诉了另一个人,这个人也知道了这个地址,但是xxx的家你并没有直接拿给另一个人,所以显而易见,你去xxx家拿东西,另一个人去了会发现少了,
如果像你说的改成直接复制一份给另一个人的话,那么你需要把xxx的家重新盖一套,东西都一样,然后搬过去交给另一个人,显然这不可能
那么java是面向对象的,它是完全符合面向对象的观点的,正因为你不可能重新盖一套房给人家一样,java也是这样做的
Q3:java中,类的对象,对象的实例,对象的引用,三者如何进行区分,有何区别呢?
首先,没有“对象的实例”这一说法,只有类的实例,而类的实例,只的就是类的对象,简称 对象。
而类的引用,你可以通俗一点来理解,就是类对象的变量名,因为一个类的对象的变量名,其实是只的一段内存位置。
故而,类的对象,就是类的实例,也就是我们通常说的对象。
而类的引用,则是指该类实例化之后,在内存的地址(用变量名表示)
例如:Object obj=new Object();
其中,类名固然就是Object,对象的引用就是obj(代表的内存地址)了
Q4:Java中请问将一个对象赋值给另一个同类对象,这两个对象是否指向同一堆内存?
= =,赋值就是把一个引用的地址指向了另外一个地址~然后它的值就是这个地址的值。
也就是说,如果你的对象都是同一地址,那么改变该地址的值,另外一个同地址的对象也会改变。
比如
List a = new ArrayList(); a.add("a");List b=a;b.add("b");System.out.println(a);//output:[a,b]
这里边的a、b就是同一地址;
但是有赋值的则不会如此:
String a="a";
String b=a;
b="b";
System.out.println(a);//output:a
这里边b的引用虽然指向了a但是后来的赋值让它指向了新的地址,改变的不是原来地址的值;所以a没有改变。
你的哥哥弟弟必须是两个地址不同的对象
Person brotherA = new Person();
Person brotherB = new Person();
这样的;
如果你一定要弟弟继承哥哥的属性,你可以在Person中实现implements Cloneable接口,并且重写clone方法。然后 brotherB =(Person)brotherA.clone();
这样brotherA和brotherB都一样且改变brotherB/A都不会影响另外一个。
www.yiJ!iTAO.Com
Q5:java中对一个对象进行赋值之后返回,返回对象与原对象是不是同一个呢?
我们在编码过程经常会碰到将一个对象传递给另一个对象,java中对于基本型变量 采用的是值传递,而对于对象比如bean传递时采用的是应用传递也就是地址传递,而很多时候对于对象传递我们也希望能够象值传递一样,使得传递之前和之后有 不同的内存地址。
Q6:Java在一个对象中,声明另一个对象,再使用这个对象的变量,这种方式是引用不?
你是说
public class A {
private int age=10;
public B b ;
}
class B {
}
a为A类对象实例,b为B类对象实例。当a.b对b赋值的情况吗?你要知道a.b是从a的首地址开始计算出a对象存储的B类引用变量的b的地址,b的内容是在堆内存中存储的。a.b = xx;这里的xx必定也是B类对象的引用变量的值(即B类在堆内存中的首地址)。这里是值传递的形式。Java中的赋值,例如A a = new A();都是值传递的形式。
Q7:Java子类对象赋值给父类对象的问题
UseCase是基类
UseCase2 u=new UseCase();只能用UseCase的方法
而UseCase2 u=new sub(); 定义sub类对象的同时也初始化了UseCase2,这是可以同时用子类和父类的方法!
Sub extends UseCase2的意思是Sub是子类,从UseCase2中继承的
希望你能明白~hehe,有问题给我message
Www.YIjItAo.C#OM