java中,String类的值声明后不能修改?

书上说:java中,String类的值声明后则不能修改为什么这段代码中的String类型变量内容可以被修改?===============================... 书上说:java中,String类的值声明后则不能修改
为什么这段代码中的String类型变量内容可以被修改?
============================================
public class StringTest
{
public static void main(String args[])
{
String a = "你好!" ;
System.out.println(a) ;
a = "hello!" ;
System.out.println(a) ;
}
}
========================================

教程里使用了引用传递,讲解了String无法被修改

而我用最简单的赋值来进行测试,发现可以被修改

正在看基础概念,脑子还理得不是很顺,求指导,感谢!
展开
 我来答
百度网友211658b42
2015-04-10 · TA获得超过3383个赞
知道小有建树答主
回答量:606
采纳率:100%
帮助的人:599万
展开全部
String对象不可修改指的是对象本身不可修改,而不是引用不可修改。
String a = "你好";
这行代码的意思是声明一个String类型的引用变量叫做a,在内存中创建一个String对象(值为"你好"),然后把这个对象的引用赋值给变量a。
a = "hello";
这行代码执行的效果是在内存中另外创建了一个String对象(值为"hello"),然后把这个新对象的引用赋值给变量a,而不是把原来的内存中的那个“你好”的String对象值变为“hello”。如果之后内存中那个“你好”的String对象没有任何引用,那么就会被下一次垃圾回收器运行时回收。
String和所有的基本类型包装类的对象都是不变量。内存中的不变量对象的值是不能被改变的。
百度网友c5bc6a4
2015-04-10 · TA获得超过646个赞
知道小有建树答主
回答量:519
采纳率:50%
帮助的人:441万
展开全部
你误解了教程的意思,教程是比较了Object对象和String在作为方法参数传递后能否在方法内部被修改
比如:
public static void main(String args[]) {

String tmp = "a";
foo(tmp);
System.out.println(tmp) ; //这里输出的是a,而不是在foo里重新设定的b

}

private void foo(String str) {
str = "b";
}

==========================================================
如果传了一个对象
public class StringTest {
public String m_str;

public void toString() {
return m_str;
}
}

public static void main(String args[]) {

StringTest tmp = new StringTest();
tmp.m_str = "a";
foo(tmp);
System.out.println(tmp.toString()) ; //这里输出的是b,因为这个对象的m_str值在foo方法中被改变了

}

private void foo(StringTest str) {
str.m_str = "b";
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fa6f888
2015-04-10 · TA获得超过1056个赞
知道小有建树答主
回答量:519
采纳率:0%
帮助的人:516万
展开全部
1. String a = "你好!" ;

内存中分配了两个空间,一个给a,一个给"你好!"。然后a指向"你好!"这个内存地址
2. a = "hello!" ;

内存中重新分配一个空间给"hello!",改变a的指向,指向"hello!"。同时"你好!"任然存在。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuxingxingvip
2015-04-15 · TA获得超过252个赞
知道小有建树答主
回答量:372
采纳率:70%
帮助的人:124万
展开全部
String可以赋值, 有等于号就是赋值吗, String是基本类型马? 再回去看看.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
指尖点滴bV
2015-04-10 · TA获得超过626个赞
知道小有建树答主
回答量:1258
采纳率:71%
帮助的人:253万
展开全部
你看错了吧。又不是final的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式