如何实现Java 字符串变量间的赋值

publicclassdd{publicstaticvoidmain(String[]args){Stringa,b;a="dfdf";b=a;System.out.pr... public class dd{
public static void main(String[] args) {
String a,b;
a="dfdf";
b=a;
System.out.println(b==a);
}
}如上讲a赋值给b,赋值的只是a的引用地址,如何实现真正赋值??
展开
 我来答
hebaobin
推荐于2017-11-24 · TA获得超过180个赞
知道小有建树答主
回答量:123
采纳率:0%
帮助的人:87.2万
展开全部
可以用new一个字符串,字符串本身就比较特殊,根据创建方式不同,占用的内存区域也不同。
如果用String str = new String("acb");那么就会再堆内存中分配一个空间。如果按你上面那种赋值,那么当a="afdf"时候,就会栈中找值等于"dfdf"的字符串,如果找到了,就将a的引用指向它,如果没有找到就开通新的内存,让后a指向它,执行到b=a;时同上,当然这个时候栈中必然有"dfdf"所以不会开辟新的内存空间,而是将b的引用直接指向"dfdf"所占的内存地址。
栈内存中的值可以共享,而堆内存不同,因为堆内存是在编译的时候才会分配的,属于动态的,因为事先也不知道,它会占用多大内存,所以不好分配。
追问
就是说,当内存中已经分配有这个字符串空间,就不允许再分配一个同样字符串的空间,只能引用之前的?
追答
这就是栈内存机制,你可以用equals和== 测测
equals是比较值的,==是比较内存地址的。对象的引用和一些基本数据变量在栈中存放。还有些说法是内存有四块有堆内存,栈内存,常量区和静态块。
wang_qiang_stu
2011-12-20 · TA获得超过119个赞
知道答主
回答量:81
采纳率:0%
帮助的人:68.6万
展开全部
相对来说,为了节省内存,优化程序,不必要的情况下不会去开辟新的物理内存。

如果希望地址不同,但值相同,那可以再new String("?");一个变量,然后用equals方法判断前后变量的值。
即:b = new String("dfdf");
System.out.println(b==a); //false
System.out.println(b.equals(a)); //true

大概就这样,希望对你有帮助!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
77606365
2011-12-20 · TA获得超过191个赞
知道小有建树答主
回答量:119
采纳率:0%
帮助的人:100万
展开全部
直接b="dfdf";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
main_inf
2011-12-20 · TA获得超过1575个赞
知道小有建树答主
回答量:811
采纳率:100%
帮助的人:530万
展开全部
b = new String("dfdf"); 强制要求分配内存空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
By_Data
2011-12-20
知道答主
回答量:11
采纳率:0%
帮助的人:6万
展开全部
长知识了,以前没想过这个问题,一般都是想数组和别的应用数据类型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式