问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-05-25 16:23

我来回答

4个回答

热心网友 时间:2023-11-18 03:54

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

热心网友 时间:2023-11-18 03:55

因为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);

热心网友 时间:2023-11-18 03:55

replace方法并不能改变字符串本身的,只是replace方法能返回一个处理后的字符串而已,例如:
String s="hello";
System.out.println(s.replace("h","H"));
System.out.println(s);
输出结果:
Hello
hello

热心网友 时间:2023-11-18 03:56

String比较特殊,对String的操作,如果内容改变了那么就返回一个新的String,如果内容没变,就返回String的一个引用。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 java String对象 java中string类创建对象 win10电脑登录两个要怎么登录 孩子数学成绩差,家长怎样做才能得到改善? 孩子成绩差,记忆力不好,家长该怎么教育呢? 文曲星电话手表可以分享流量吗 Win10 PC电脑如何打开多个 就业证需要什么材料 win10电脑怎么登录两个 高中阶段怎样学习英语 高中怎么样学习英语 我高中二年级老对英语一窍不通我想从新学习英语怎么办? 怎么样提高英语成绩(高中二年级)由于在初中时比较贪玩所以基础几乎没有,请高手帮忙 我是一个高中生 我刚上高2 我想知道如何学习英语 我是一点基础都没有的 从小就没有学习过 补办就业失业证需要什么证件 山楂生吃好还是熟吃好? 我英语水平是高中二年级,如何用整整半年时间大幅度提升英语水平 55年授衔的时候有多少可授而没授的? 制作冰糖葫芦的果实是否要先煮熟? 高中二年级了,但是英语成绩太差,50多分,该怎么学 创建String的两种方式有什么区别 java中,String类 创建的字符串对象不要用new字符分配内存就能用啊 做为项目经理应具备什么能力? 做带队经理需要具备哪些条件 请问:TP-LINK TL-WR845N 无线路由器300m 穿墙王 ,115.00元怎么样,是不是贵啦? 路由器哪家强?穿墙效果好,200块以下!!! 家里准备安装中央空调,请问哪款中央空调出风比较均匀? tenda腾达多少钱300 穿墙王无线路由器 无线路由器穿墙王哪款好,100元以内 netcore/磊科 nw736 300m 三天线无线路由器 穿墙王多少钱 现在无线路由器, 有非智能的普通的那种吗? 比较不错的是哪些型号呢 TP-LINK无线路由器450M穿墙王TL-WR886N 三天线家用WIFI怎么样? 请问广州南站附近或者是广州南去白云机场的路上,哪里有卖雨伞和棉拖鞋的,便宜点的 穿墙王300m无线路由器的价格是多少 请问la petty a loup的小熊雨伞在广州哪裏有的卖?香港也行..具体地阯 TP-LINK TL-WR885N三天线450M无线路由器包邮穿墙王wifi AP 智能好不好用,价格多少钱? 如何设计家用中央空调的进出口风 还有什么牌子好 无线路由器有没有穿墙王 如何选择中央空调出风口? 四岁的孩子比较叛逆,大人无法跟他沟通,有什么好的办法可以解决这个问题?