String s1="nihao";
String s2="nihao";
String s3=new String("nihao");
String s4=new String("nihao");
String s5=s4;
s4=s1;
s3="nihao";
占了多少内存块?
System.out.println(s1==s2);
s1与s2比较的是什么,是指的那里的地址,
对象--到底在内存当中是怎么存放的,比如上面代码,对象是怎么存放的,
我是这样理解的,对象就是地址,
s1,s2存放相同的地址,所以属于一个对象,
请大家讨论
String s2="nihao";
String s3=new String("nihao");
String s4=new String("nihao");
String s5=s4;
s4=s1;
s3="nihao";
占了多少内存块?
System.out.println(s1==s2);
s1与s2比较的是什么,是指的那里的地址,
对象--到底在内存当中是怎么存放的,比如上面代码,对象是怎么存放的,
我是这样理解的,对象就是地址,
s1,s2存放相同的地址,所以属于一个对象,
请大家讨论
2.true
3.比较的是s1和s2是否指向相同的对象
4.存放了对象的refer
String s2="nihao";
String s3=new String("nihao");
String s4=new String("nihao");
String s5=s4;
s4=s1;
s3="nihao";
占了多少内存块?
System.out.println(s1==s2);
s1和s2 是一个对象,占用一块内存空间,
s3是一个新的对象,是s1的拷贝.占用一块内存空间,
s4又是一个新的 对象,是s1对象的拷贝,占用一块内存空间,
s5和s4指向同一个对象,s4=s1将引用指向s1的对象,s4的内存由gc收回,
s3又指向s1的对象,s3原来的对象的内存空间由gc收回.
最后一共占用了两块内存空间,s1,s2,s3,s4是指向同一个对象,s5是s1拷贝的新的对象.
s1 == s2比较的是引用(reference).
但s1,与s2本身也各占一块内存块;
第一和第二句共占了3块
String s3=new String("nihao");
String s4=new String("nihao");
第三和第四句共占了3块
共占了4块内存块
s5指向s4所指向的内容(nihao);但s5又占用一块内存块也就地址空间
1块
s4=s1//s4地址重新存贮s1指向"nihao"的地址
但由于上一句String s5=s4,s5指向了原来的s4的地址,
所以String s4=new String("nihao");产生的nihao占的内存块没有回收
s3="nihao"
String s3=new String("nihao");产生的nihao占的内存块变成了一个没有任保对象指向的一块内存块将被回收总共占了7块内存块(s1,s2,s3,s4,s5+两个nihao开辟的空间)被回收的是原来s3指向的nihao占的内存块在线等
String s2="nihao";
String s3=new String("nihao");
String s4=new String("nihao");共产生三个对象,也就开辟了三个存贮nihao的内存块,s3,s4,
还有一个就是s1,s2共同指向的nihao的地址,也就是第三个对象,
String s5=s4;
s4=s1;
s3="nihao";
后还有s1,s2,s3,s4指向原来s1,s2指向的nihao;
s5指向原来s4指向的nihoa;
而原s4指向的nihao内存块,由于没有什么指向,所以被回收
收改一下为下面的
而原s3指向的nihao内存块,由于没有什么指向,所以被回收
String s2="nihao";//2+1块
String s3=new String("nihao");//2+1+2块
String s4=new String("nihao");//2+1+2+1块
String s5=s4;//2+1+2+1+1
所以总共有7块内存块
s3和s4开辟的内存块有可能被回收,具体回收时间是不确定的
而原s3指向的nihao内存块,由于没有什么指向,所以被回收
2.true
3.s1==s2比较的是s1和s2这两个对象引用指向的同一块地址,