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

java中教材说String类不能进行修改、删除、替换,要用StringBuffer。

发布网友 发布时间:2022-04-23 21:30

我来回答

4个回答

热心网友 时间:2023-09-25 01:11

String 的所有操作都不是更改对象本身,而是返回了新的字符串;就是说,replaceAll之前和之后不是一个对象了!
==================
其实 【遗忘99】 说的有点过了。你现在不要理会网上争论的字符串常量池问题,所有关于几个String对象的问题,都暂时不要理会;JVM不同,其实结论是不同的。而且他说的那个列子,几乎所有现代JVM,都生成2个对象:"abc" 和 "abcabc",不是3个。

总之你记得:两个拼写不一样的String ,一定是不同的对象;两个拼写一样的String,也可能是不同的对象
==================
再给你个例子,跑跑看,根据结果自己想想,很容易就明白了:
String a = "ABC";
String anotherA = a.replaceAll("A", "B");
System.out.println(a);
System.out.println(anotherA);
System.out.println(a==anotherA);

StringBuffer b = new StringBuffer("ABC");
StringBuffer anotherB = b.replace(0, 1, "B");
System.out.println(b);
System.out.println(anotherB);
System.out.println(b==anotherB);

热心网友 时间:2023-09-25 01:11

这是说字符串的“不可改变”是字符串池,例如,
String str1 = "abc";
String str2 = "abc";
str1 += str2; //new obj
现在有了三个对象。
像你说的relpaceAll方法,最终是创建一个新对象,而原理的对象是不变的。追问有创建新对象吗?不是把原来的字符串替换成新的字符串,整个替换过程并没有改变原对象的引用也就是地址吗?

热心网友 时间:2023-09-25 01:12

在实用中:
String 的改变会改变存放这个数据的物理地址,如果程序中需要频繁得改变某一个String变量的话效率很低
StringBuffer如果改变而导致原来的物理地址不够用的时候,会延伸物理地址,相对String的改变更为方便
我曾经做过类似的东西,不断的往一个String中增加新的字符串,大约一万个,用String要运行1分钟多,用StringBuffer只要1秒
再说,replaceAll()不是对String进行修改,是生成新的String,这样用:
String a = "123";String b = "";b = a.replaceAll("1","3");
得到结果是 b是323, a还是那个123追问也就是说,进行替换时是相当于对源对象进行复制一遍,这时有两个占据不同内存的字符串,物理地址不同,源字符串没改变,复制成的字符串进行替换,是这样吗?如果被替换的字符串长度和替换的字符串长度不一样能完成替换吗?帮我讲解一下这个问题,谢谢。

追答我认为应该是将一个字符串逐字逐句的复制到一个新的地址,在复制过程中如果遇到要求替换的就直接替换了,复制出的新的字符串就是replacaAll()生成的新的String变量,原来的String变量没变。
replaceAll("1","1234567890")这样是可行的。
介绍个例子:一般网站发帖的帖子里是不应该有引号的,因为在写入数据库时帖子中的引号会导致错误,甚至可以用来注册攻击,所以一般都会用一个replace("\"","abcdefg......")把要写入数据库的字符串中的引号替换掉,等要读取这个帖子时,会用replace("abcdefg......","\"")把引号换回来
这里顺便说一下,repalaceAll(oldString,newString)是以前的JAVA方法,现在已经用
repalace(oldString,newString)方法代替了,而repalaceAll()方法一般用以正则表达式的替换

热心网友 时间:2023-09-25 01:12

建议楼主去看下源码,就啥都明白了
Java中String和StringBuffer的区别

简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串...

String类和StringBuffer类的区别

(1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringBuffer类对象为可修改对象,可以通过append()方法来修改值 (2)String类对象的性能远不如StringBuffer类。 关于以上具体解释如下: 在java中有3个类来负责字符的操作。 1.Character 是进行单个字符操作的, ...

JAVA中字符串类型String是不允许改变其内容的,那么请问简要谈谈下列语 ...

确实,Java中的String类型确实是不允许改变其内容的,String类型的对象一旦建立,将在堆内存当中占据一个固定的内存空间,String类型的对象无法改变。但是你在运算的时候又发现,你定义的String类型的s变量又是可以进行连接的,如"abc"+"def"最终得到的s的值是"abcdef",这似乎看着String类型的对象又是可...

请问java中的String类和StringBuffer类有什么区别与联系,谢!

1.Character 是进行单个字符操作的,2.String 对一串字符进行操作。不可变类。3.StringBuffer 也是对一串字符进行操作,但是可变类。String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是final类...

经常要修改的字符串,要String,还是要StringBuffer()好呢!

用stringBuffer()好些,因为string就相当于又new 了一个对象,string和stringBuffer的区别是,string是定长,长度不可变的,每次修改就又new 了一个对象,而StringBuffer是的长度是可变的,不会再new一个对象,用append添加

String类中的内容一旦被初始化就不能再改变,那么为什么还有replace和...

String的不可变性是指:在String对象池中具体的String对象一经new出后就不能改变了,但是指向该串的引用仍然可以指向池中其它地方,也就是说值为final的,但引用还是活的.

在java中,说String是不可变的,可是为什么

1. 首先String不属于8种基本数据类型,String是一个对象。因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;3. String str=”kvill”;String str=new ...

String、StringBuffer和StringBuilder类的区别

接着,我们深入探讨String、StringBuffer与StringBuilder类的特点。String类提供了一个安全且不可修改的字符串实例,一旦创建,其内容不能改变。这使得String在需要安全、不可变字符串操作的场景下成为理想选择。StringBuffer类是为了高效地拼接大量字符串而设计的,它提供了append和add方法,允许在已有的字符串...

string和stringBuffer有什么区别?

1、String:用在固定的字符串,不经常对字符串进行更改的情况。2、StringBuffer:经常需要对一个字符串进行修改,例如插入,删除等操作,使用StringBuffer要更加适合一些。三、优势不同 1、String:String类中没有用来改变已有字符串中的某个字符的方法 2、StringBuffer:StringBuffer的类属于一种辅助类,可...

为什么java中的字符串是可修改的,而C++中的字符串不可修改.具体指什么...

java中的String类是不可修改的,你看着能修改,是修改的字符串引用的值,而不是字符串本身,但是java中还有一个类Stringbuffer类,这个是可修改的 C++中的字符串类型,是静态的,所以不能修改,如果想修改的话,把字符串存入数组比较好

javajava基础教程 java中如何删除 java怎么实现删除和添加功能 java教材推荐 java经典教材 java基础经典教材 java删除 java删除一个文件 java怎么删除文件
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...现在说的最多一句话就是不想解释了让我相信他 我问他什么的说不想... 猫妈妈买回的是什么? 公务员考试中要求的“2009年应届毕业生”怎么界定? 165身高女生标准体重 投诉家里养了很臭的鸡鸭怕 No.93 希望皇霍普·真皇的卡片信息 邻居在我家边上养了好多鸡,夏天气味很臭,严重影响我的生活 手上总起小水泡怎么回事 ...问我,你为什么选择我们公司??你有什么优势可以让我们录用你?_百度... 艾滋病患者舌头发白怎么回事 请问武汉市武昌区房地产公司的上级部门是武汉市住房保障管理局吗? java中,StringBuffer类对象经过增加删除插入后,空间是连续的吗? 武汉:加强新建商品房销售全过程监管 预售申请限最高5次 java全局变量清空? 武汉房票制度引发热议:此前就已推广 或将抑制楼市虚火 关于java的StringBuffer的tosting方法的一点疑惑, 鸡腿怎样弄简单又好吃 武汉市住房保障管理中心怎么样? byte *buffer怎么清空 武汉有哪些局 stringbuffer删除所有指定字符串 武汉市住房保障和房屋管理局的人员编制 StringBuffe循环拼接存放到ArrayList里再清空怎么搞? 武汉市住房保障和房屋管理局的主要职责 Stringbuffer怎么样清空 在JAVA中怎么清空StringBuffer变量内容 如何将stringbuffer中的内容清空 怎样在超市购物的时候如何辨别转基因食用油和非转基因食用油转基因的食用油和非转基因的都有什么牌子 哪些油是转基因 现在的转基因油都有哪些? 武汉房票制度引发热议,制定这一制度为的是什么? 武汉非重点资金提取流程 JAVA计算器问题 武汉加强新房监管:交房3个月内不得擅自拆除和出售样板房 java 删除文件内容 武汉购房网签怎么查询查询 武汉市房产局信息网 java 去除多余空格 武汉就“凭房票买房”征求意见,购房须先申请购房资格 java中如何清除一个全局变量的字符串原来的值 CSR赛车2的奖箱特定车辆概率x10或x20的活动间隔多久会有一次呀? 5月10日起,武汉买卖二手房可自行办网签 java 如何删除一个字符串中出现次数最少的字符。比如addffdf 输出 ddffdf java中如何把第一行给删除 武汉市住房保障管理中心编外聘用人员待遇如何?是属于劳务派遣还是正式合同用工? 不动产登记落地仅剩4个月 国土部被迫地方督战 武汉:保障性租赁住房租金不高于同地段市场的85% 何以笙箫默,全文多少字? 何以笙萧默一共有多少字啊?怎么就只是那么短,两个小时就看完了,是不是我没有下载好。 《何以笙箫默》的内容?