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没有改变。



是的。

对象是引用类型的,所以如果把一个对象赋值给另一个变量,它实际上只是把内存地址赋值了。也就是说,如果对象都是同一地址,那么改变该地址的值,另外一个同地址的对象也会改变。

首先可以使用构造器的参数区别开两个对象,如果要直接赋值而不互相影响,那么可以使用clone(浅复制、深复制包含内部引用等)方法如Person newPerson=(Person)oldPerson.clone();这样新旧对象是2个对象而不是共用一个地址的2个对象。

堆和栈

内存管理在Java语言中是JVM自动操作的,当JVM发现某些对象不再需要的时候,就会对该对象占用的内存进行重分配(释放)操作,而且使得分配出来的内存能够提供给所需要的对象。

在一些编程语言里面,内存管理是一个程序的职责,但是书写过C++的程序员很清楚,如果该程序需要自己来书写很有可能引起很严重的错误或者说不可预料的程序行为,最终大部分开发时间都花在了调试这种程序以及修复相关错误上。

以上内容参考:百度百科-java内存模型



对象是引用类型的,所以如果你把一个对象赋值给另一个变量,它实际上只是把内存地址赋值了,
这就比如 你知道xxx家的地址,然后你告诉了另一个人,这个人也知道了这个地址,但是xxx的家你并没有直接拿给另一个人,所以显而易见,你去xxx家拿东西,另一个人去了会发现少了,
如果像你说的改成直接复制一份给另一个人的话,那么你需要把xxx的家重新盖一套,东西都一样,然后搬过去交给另一个人,显然这不可能
那么java是面向对象的,它是完全符合面向对象的观点的,正因为你不可能重新盖一套房给人家一样,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都不会影响另外一个。

对象的直接赋值是直接改变内存指向的,的确会出现你上面的情况
如果要构建不一样的对象,那么不能直接使用=号,要使用clone() 方法你的构建哥哥或弟弟的对象的类要覆盖OBJECT的clone()方法,里面将每一个非基本类型的变量都进行拷贝,也就相当于重新创建了一个对象。
基本类型的=号赋值是直接重新构建内存空间的,而非基本类型的对象则是直接改天内存指向。

java中创建一个客户类数组customer[] 怎么给数组中的变量赋值?
答:先给数组元素new customer对象,然后通过customer对象在给属性变量赋值。过程 customer类:class customer{//定义customer类 public int a1;//顶一个变量属性a1}1、顶一个customer数组 customer[] ct = new customer[3];//定一个customer数组,数组长度是32、给数组中的customer赋值 for(int i=0;i...

java给对象的成员变量的赋值方法
答:java类的成员变量可以直接赋值,即赋初始值;java类的成员变量也可以不赋值,系统会根据变量类型赋系统默认值;java类的成员变量可以在以如下赋值:声明时(int i=10;)构造方法里(this.变量名=? 方式)类声明时不赋值,用 对象实例名.setXXX(xxx); 即set方法 Java类的局部变量必须在声明时赋值,否则报错....

java date怎样赋值?
答://设置秒钟为30秒```2、使用有参构造函数创建Date对象,并传入年份、月份、日期、小时、分钟和秒钟3、使用SimpleDateFormat类的parse方法将字符串转换为Date对象注意:在Java中,Date类存在时区问题,因此在使用Date类时需要注意时区的设置。可以使用SimpleDateFormat类设置时区。慕课网聘请一线技术牛人,传授...

在Java中对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个...
答:C++是这样,但是JAVA是没有生成新对象的,除非用关键字new,如果是已经存在的对象也不像C++那样拷贝一份,而是直接指向该对象,对象自始至终只有一个

Java中如何在for循环语句中对 类对象数组 进行赋值
答:.earnings();return sum;} } public class Application1{ public static void main(String[] args){ Company company=new Company();company.getSalary(new YearWorker(),new MonthWorker(),new WeekWorker());System.out.println(company.getAllSalary());} } //我写的一个例子,供你参考。

java一个类中的变量的值赋值给另一个类中的变量,供后面类处理,最好有...
答:public String getRandom(){ //get()方法确保另一个类能够使用该变量 run();String str = "";for (int i = 0; i < random.length; i++) { str += random[i] + "\n";} return str;} } package chn1; //类2 import java.io.File;import java.io.FileWriter;import java.i...

用JAVA编写一个学生类,要求创建学生对象,对各属性赋值并输出信息_百 ...
答:package Test;import java.util.Date;public class test { public static void main(String[] args) { Student stu=new Student();stu.setName("zhangsan");stu.setAge(18);stu.setBirthday(new Date().toString());System.out.println(stu);} } class Student{ private String name;private ...

Java中通过与对象同名的字符串,找到该对象,赋值给其他变量?
答:如果是这样,用(对象名.成员变量=具体的值)这样的方式来设置这个台灯的名字,似乎也说得过去.可是书上却又说,字符串变量既是一个类变量,也是一个对象.那这个作为对象怎么去理解呢?我不是很明白.而且这个对象又是有什么具体的属性呢?请教各位前辈了传递参数和赋值 有什么区别么?我是初学者,请指教 ...

在java中 变量之间是如何赋值的
答:我们看到u2并没有随着u1的改变而改变。如果我们不改变u1指向的地址,而是改变u1指向地址所对应的数据(即将 u1 = new TUser(); 注释掉)。那么u1,u2 打印的记过将都会是 TUser(id=2)通过以上三个实验我们发现:变量之间的赋值,可以说没有所谓的值赋值和地址赋值。简而言之,将一个变量a赋值给另...

java中可以将某个引用变量的值赋值给另外一个引用变量,
答:所以无论对a还是b进行修改的话,实际上都是修改内存中由new A()生成的对象 而 a 和 b 其实都是对 new A()生成的对象的引用 对象的复制是指内存中实际存储两个对象,只不过第二个对象的所有之都与第一个对象相同,相当于 A b = new A(),让后再把a 中的内容全部复制到b中,这个时候修改...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网