String 对象的问题

wren4255 2008-03-25 01:19:15
public abstract class wren
{
public static void main(String[] args)
{
String st1, st2;
st1 = "2";
st2 = st1;
st1 = null; //执行这行之后,为什么st2不是null呢??
System.out.print(st1);
System.out.print(st2);
}
}

结果为:null2
st2=st1的时候,是不是st2和st1都指向一个内存空间呢,那为什么st1=null,的时候,st2不是null呢。
...全文
124 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzzh9 2008-03-25
  • 打赏
  • 举报
回复
堆内存主要存对象,栈内存存引用。st1和st2为引用,当 st2 = st1时他们同指向一个对象“2”,当st1 = null时,st1指向空对象,st2则还指向栈内存中存储的“2”对象。st1改变的只是自己的引用地址,其原指向的对象并没有改变。
realsantino 2008-03-25
  • 打赏
  • 举报
回复
噌分!
楼上正解!
胡矣 2008-03-25
  • 打赏
  • 举报
回复
st1 是一个引用,"2"是一个实例
st1 = "2"; //st1指向"2"
st2 是一个引用
st2 = st1;//这句执行完 st2也指向"2" 也就是st1和st2同时指向"2"
st1 = null;//执行完 st1 和 "2" 断开,st1不指向任何实例
所以 st1为空 st2指向"2"
michelecindy 2008-03-25
  • 打赏
  • 举报
回复

public abstract class wren {
public static void main(String[] args) {
String st1, st2;
st1 = "2";
st2 = st1; //st2指向st1的内存地址,得到值str="2"
st1 = null; //执行这行之后,st1被重新赋值
System.out.print(st1);
System.out.print(st2);
}
}
sun513491300 2008-03-25
  • 打赏
  • 举报
回复
顶2楼!!!
linmen1983 2008-03-25
  • 打赏
  • 举报
回复
堆内存主要存对象,栈内存存引用
比如:人--存在堆中
楼主是个引用(就是个代号),因为你也是人~~,是一个特定的人
人 楼主=new 人();
右边在堆中开辟空间,这个对象包含人的属性,左边声明引用
以后就可以直接用这个代号
楼主.方法()来调用"人"中的方法
wren4255 2008-03-25
  • 打赏
  • 举报
回复
Java的对象都是在堆上创建的,操作时候用的都是引用的方式.

可以再深入一些么??不太明白。。。
薛定谔之死猫 2008-03-25
  • 打赏
  • 举报
回复
因为str1和str2都是对象的引用,不是对象本身,Java的对象都是在堆上创建的,操作时候用的都是引用的方式
kingaking 2008-03-25
  • 打赏
  • 举报
回复
st2=st1这一句其实是把引用st2指向了st1所指的对象,即内容为"2"的String类的对象,所以当st1这个引用的指向改变后,st2的指向不变,即仍然为字符串"2".
fuyou001 2008-03-25
  • 打赏
  • 举报
回复
沙发!

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧