java中,String类对象中的内容一旦被初始化就不能再改变,那么String类中还有replace和toUpperCase方法呢

 我来答
huhansan900
2011-08-10
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
朋友,你好,对于你的问题,我觉得下面的回答您会满意明了:
String类对象中的内容一旦被初始化就不能再改变 没错的,这是String类的特性,一定要记住。
下面举个例子:
String s = "Hello"; //这时候会在内存中开辟一块空间存储“Hello”,并且S的引用指向它;
s = “world”; //看这句,初学者一般觉得这样的话s的值就变了啊,跟String的特性相违背了啊,其实并不然,s只是对象的引用,真正的对象存在了内存中,执行这句语句的时候,会在内存中重新开辟一块内存,用来存储“world”,并将原来的s引用指向“world”。但是原来的内存中的“hello”并没有改变。也就是说String类对象中的内容一旦被初始化就不能再改变。
希望您会看明白。
不一定是飞机
2011-08-07
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
因为String类是final的,所以一旦初始化是不会被改变的

让我们来看看源码replace:
public String replace(CharSequence target, CharSequence replacement) {
return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
}

Pattern.compile的源码:
public static Pattern compile(String regex, int flags) {
return new Pattern(regex, flags);
}
Pattern.replaceAll源码:
public String replaceAll(String replacement) {
reset();
boolean result = find();
if (result) {
StringBuffer sb = new StringBuffer();
do {
appendReplacement(sb, replacement);
result = find();
} while (result);
appendTail(sb);
return sb.toString();
}
return text.toString();
}

有此可见,每次replace操作都是返回Pattern对象的text,因为每次Pattern.compile都返回个新的Pattern,所以他每次返回的是个新的str

而toUpperCase只是对char的数组操作后进行了一份拷贝,然后返回一个新的str:
return new String(0, count+resultOffset, result);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
win98xp
2011-08-09
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
replace方法并不能改变字符串本身的,只是replace方法能返回一个处理后的字符串而已,例如:
String s="hello";
System.out.println(s.replace("h","H"));
System.out.println(s);
输出结果:
Hello
hello
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
YOUREclipse
2011-08-07
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
String比较特殊,对String的操作,如果内容改变了那么就返回一个新的String,如果内容没变,就返回String的一个引用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式