对象a=对象b

[复制链接]
查看11 | 回复5 | 2008-10-20 15:38:15 | 显示全部楼层 |阅读模式
一个对象String a=new String(“good”);

String b=new String(“look”);

a=b;

然后我改变a的值;a=“cool”;

为什么b的值不改变哦输出b的值还是look;

a=b就是表示a和b指向同一个对象吧,既然改变了a的那b也应该改变撒。
a=b;
就是让a也指向b现在a和b都是指向look的地址,我随便改变a或b都是改变的一个值了。应该2个都会变化撒。

回复

使用道具 举报

千问 | 2008-10-20 15:38:15 | 显示全部楼层
a指向存good的内存地址,b指向存look的内存地址. 当a=b;a指向存look的内存地址. 改变a的值;a=“cool”;a指向存cool的内存地址. b的指向的地址没发生变化.所以b的值还是look继续:你改值的过程,便把a从新指向新的内存地址....
回复

使用道具 举报

千问 | 2008-10-20 15:38:15 | 显示全部楼层
还是对java的基础不够深。 1.其实String类是一个final型的。不可以改变也不可被继承的。 2.a = "cool"其实也就是等于a = new String("coll");重新给a分配了一块内存。(话外:因此大多数程序员都采用StringBuffer) 其实这个问题用图表最容易说清楚为什么改变a而不能改变b。 但是baidu不提...
回复

使用道具 举报

千问 | 2008-10-20 15:38:15 | 显示全部楼层
你将b指向a,a的值发生了变化,你输出a,肯定是变化的而b的值没有变,a=b,将b值付给a,所以你输出的b当然还是look了...
回复

使用道具 举报

千问 | 2008-10-20 15:38:15 | 显示全部楼层
可能是你弄错了吧,a=b是指将b的值赋给a,所以a也指向了b所指向的内存地址。改变了a的,b是不会受到影响的。如果你想看看是否改变的话你改变b的值看看a是否改变。...
回复

使用道具 举报

千问 | 2008-10-20 15:38:15 | 显示全部楼层
你理解了一半注意这句a="cool" ;这句话 等同于 a=new String("cool") ;在JAVA 中 任何以".."形式出现的 在出现的时候就自动创建一个String 对象来存放 哪怕是没有任何字符 如果你要实验a和b指的同一个你要调用a的方法来实现变化 而你上面的句子是重新创建个对象 给a...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行