纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

IT技术基础篇聊聊Java的String,还有那么几个面试弯

7月7日 圆通道投稿
  前言
  有人说看了你的基本类型篇,那我期望有Java语言表达一句话还不成了是吧,我是不是得一字一顿呢?当然不是啦,Java中存在着String,只要使用双引号概括起来的那么就是一个String(字符串)。设计
  字符串操作那可是计算机程序设计中最常见的行为了,使用频率高的因素决定了其定位与设计,设计者将其定位为不可变,不可变的表现如下:在设计上String类通过final修饰了类,同时将存放内容的char数组也使用final修饰。final关键字修饰的属性为不可修改的,修饰的类是不可继承的,如此就限制了使用者对其修改。publicfinalclassStringimplementsjava。io。Serializable,ComparableString,CharSequence,Constable,ConstantDesc{Stableprivatefinalbyte〔〕。。。}我们可以通过String类的源码先从表象看一看,每一个看起来会修改其值的方法最终都是创建了一个新的String对象。如下图字符串的截取方法,指定起止下标,但返回时如果截取长度与字符串长度一致返回当前对象,否则就创建一个新的对象返回。publicStringsubstring(intbeginIndex,intendIndex){intlengthlength();checkBoundsBeginEnd(beginIndex,endIndex,length);intsubLenendIndexbeginIif(beginIndex0endIndexlength){}returnisLatin1()?StringLatin1。newString(value,beginIndex,subLen):StringUTF16。newString(value,beginIndex,subLen);}位置使用常量方式创建的字符串存放在常量池里使用new方式创建的字符串存放在堆里
  说到这里就顺便了一下String提供的方法intern(),这个方法就有点意思了,根据下图源码表示,这个方法是返回一个标准化的表示方式,通过字符串的常量池进行返回,也就是说针对字符串调用此方法就会统一表示,主要是针对通过new创建在堆上的字符串,调用此方法,它会先去常量池里发现,如果存在返回它,如果不存在就会放入常量池并返回,简单理解就是将存在于堆的字符串放入常量池。Returnsacanonicalrepresentationforthestringobject。pApoolofstrings,initiallyempty,ismaintainedprivatelybytheclass{codeString}。pWhentheinternmethodisinvoked,ifthepoolalreadycontainsastringequaltothis{codeString}objectasdeterminedbythe{linkequals(Object)}method,thenthestringfromthepoolisreturned。Otherwise,this{codeString}objectisaddedtothepoolandareferencetothis{codeString}objectisreturned。pItfollowsthatforanytwostrings{codes}and{codet},{codes。intern()t。intern()}is{codetrue}ifandonlyif{codes。equals(t)}is{codetrue}。pAllliteralstringsandstringvaluedconstantexpressionsareinterned。Stringliteralsaredefinedinsection3。10。5oftheciteTheJavaLanguageSpecificationcite。returnastringthathasthesamecontentsasthisstring,butisguaranteedtobefromapoolofuniquestrings。jls3。10。5StringLiteralspublicnativeStringintern();重载
  重载就是操作符在应用于对应类时具有特殊意义,这里对于String而言即为连接的作用,以下通过javap命令对于源码进行反编译,进行更直观的确认:java反编译流程(参数很多,请根据需要进行添加)1、javacXXX。java2、javapvXXXpublicclassTest{publicstaticvoidmain(String〔〕args){SSSystem。out。println(s);}}0:ldc2Stringa2:astore13:new3classjavalangStringBuilder6:dup7:invokespecial4MethodjavalangStringBuilder。init:()V10:ldc5Stringbcd12:invokevirtual6MethodjavalangStringBuilder。append:(LjavalangS)LjavalangStringB15:aload116:invokevirtual6MethodjavalangStringBuilder。append:(LjavalangS)LjavalangStringB19:invokevirtual7MethodjavalangStringBuilder。toString:()LjavalangS22:astore223:getstatic8FieldjavalangSystem。out:LjavaioPrintS26:aload227:invokevirtual9MethodjavaioPrintStream。println:(LjavalangS)V30:return
  通过将源代码javap反译后可以看到指令码中,Java在处理拼接的字符串时借助了StringBuilder类,append方法即追加内容,调用toString方法new出来最终结果。
  有人会问拼接时有四个元素进行拼接,为什么只调用了2次append方法呢,因为前3个元素均在常量池优化合并。
  为了直观地看出,下面的例子,请参照如下,共计调用5次append方法:publicclassTest{publicstaticvoidmain(String〔〕args){SSSystem。out。println(s);}}0:ldc2Stringa2:astore13:new3classjavalangStringBuilder6:dup7:invokespecial4MethodjavalangStringBuilder。init:()V10:ldc5Stringb12:invokevirtual6MethodjavalangStringBuilder。append:(LjavalangS)LjavalangStringB15:aload116:invokevirtual6MethodjavalangStringBuilder。append:(LjavalangS)LjavalangStringB19:ldc7Stringc21:invokevirtual6MethodjavalangStringBuilder。append:(LjavalangS)LjavalangStringB24:aload125:invokevirtual6MethodjavalangStringBuilder。append:(LjavalangS)LjavalangStringB28:ldc8Stringd30:invokevirtual6MethodjavalangStringBuilder。append:(LjavalangS)LjavalangStringB33:invokevirtual9MethodjavalangStringBuilder。toString:()LjavalangS36:astore237:getstatic10FieldjavalangSystem。out:LjavaioPrintS40:aload241:invokevirtual11MethodjavaioPrintStream。println:(LjavalangS)V44:return弯弯绕绕面试
  一、请写出以下程序的输出结果publicclassTest{publicstaticvoidmain(String〔〕args){SSSSSSSystem。out。println(absum);trueSystem。out。println(absuma);falseSystem。out。println(absumab);falseSystem。out。println(sumsuma);falseSystem。out。println(sumsumab);falseSystem。out。println(sumasumab);false}}根据前面我们通过反编译得出来的结论:1、常量拼接仍在常量池;2、有变量参与拼接,JDK就会估化操作:SSStringBuildertempnewStringBuilder();temp。append(a);temp。append(b);temp。toString();StringBuilder的toString()方法为newString()
  二、问以下语句共创建了几个对象StringsnewString(abc);以上语句等价于:Stringtemp123;01常量池存在,则将堆内对象引用赋值,否则在堆内创建对象,并加入常量池StringsnewString(temp);1所以上述语句共创建12个对象
  三、请问以下代码是否存在问题StringlockThread。currentThread()。getName();synchronized(lock){DOSOMETHING}Lock取值为当前线程的名称,但线程名称非常量,存在于堆内,因此在这种情况下会导致锁失效。需使用intern()方法将lock加入常量池。
投诉 评论 转载

越南经济出了大问题?说好的下一个世界工厂,神话还是破灭了在西方媒体的口径中,越南的制造业非常具有潜力,隐隐然已经是亚洲第二个世界工厂,假以时日,超越中国成为真正意义上的世界工厂也不是不可能。但是,越南的经济体量,决定了它的抗风险能力……阿斯加特博拉琪BRAGIDDR5内存实测高频DDR5才是未来前言:在AMD和intel两大处理器厂商的加持下,DDR5内存已经开始从尝鲜形态变为了普及形态。比如最新的AMD锐龙7000系列、还有intel的12代、13代,都全面支……IT技术基础篇聊聊Java的String,还有那么几个面试弯前言有人说看了你的基本类型篇,那我期望有Java语言表达一句话还不成了是吧,我是不是得一字一顿呢?当然不是啦,Java中存在着String,只要使用双引号概括起来的那么就……春风又绿运河畔,美景带火近郊游扬州市民近享好春光扬子晚报网3月13日讯(记者陈咏)惊蛰已过,各类花木的盛花期陆续来临,蛰伏一个冬天的出游热情也被释放。记者12日来到扬州新城发现,这里成为市民周末休闲的首选地。深潜中心……盘点2022年贵阳周边100个露营基地详细攻略及测评,第一季趁着这个疫情期间,反正也不能出门,我们《秘境户外》耗时10多天,整理编写了一份贵阳周边最全的50个商业露营基地详细攻略和50个野生露营地的出行攻略。大部分线路我们用了几年……秋冬和西班牙莱后学穿搭!红色大衣配同色花裙堪称王室天花板造型西班牙的天气即使是到冬天也不会太冷,所以咱们还没正经入冬的地方,赶紧和莱后学学秋冬怎么穿。广东地区的朋友,还可以像莱后一样,裹一身套装。有设计感的onepiece配……张纪中晒一家五口,混血儿子不像爹,生母成谜与继母杜星霖感情好近日,张纪中夫妇在社交网晒出一家五口的合影照,三个子女正脸出镜引发网友关注。画面中,张纪中2岁的女儿小花仙坐在中间,大儿子马克和二儿子大嘟一左一右坐在妹妹身边,亲吻着妹妹……科技行业支持稀土价格飞涨台北随着稀土金属价格飙升,需求飙升以及美国和中国之间的紧张局势升温,电子硬件制造商正在大汗淋漓,美国和中国是这些重要材料的全球最重要来源。对于总部位于中国东莞的音频组件制……共同社东京奥运会总支出超14000亿日元北京时间6月22日,据日本共同社报道,东京奥运会和残奥会组织委员会21日在东京召开理事会会议,公布的最终报告显示这届因新冠疫情而史上首次延期1年的奥运总共支出1。4238万亿日……经常吃鱼,可你知道哪个部位最有营养吗?提醒这3个部位别放过鱼肉,几乎是从小吃到大的肉类。相比于畜类,鱼更受欢迎深得民心。加上父母经常在耳边念叨的吃鱼聪明!,餐桌上不可缺少,可这么一条鱼你真的吃对了吗?你又知道哪个部位最有营养吗?……网曝魅族旗舰新机已备案恰逢成立20周年,新机或更名为魅族20日前,2022年高通技术峰会如期召开,会上正式发布了全新一代旗舰SoC骁龙8Gen2。骁龙8Gen2参数规格:据了解,该芯片采用全新的1223八核心CPU架构设计,……男人老不老,下半身这4个症状看了就知道,一点都藏不住虽然每个人都会经历衰老,但当衰老真正来临时,大多数人仍会感到恐慌。不仅是女性朋友,男性朋友也同样害怕衰老。没有人想看着自己的脸变老,而内心没有波澜。此外,男性一直是家庭的中坚力……
加速股权变革!永辉进攻就是最好的防守!茶有茶性,人有人性安哥拉往事第二版(3)初识周围环境与第一次工作任务大加索尔VS波什,科比和詹姆斯的帮手谁更强?交手数据不会说谎米勒老师最新评级LPL各战队热血传奇当年这个PK神技,为什么到后来就没人用了?美股风暴!暴跌80,超10只银行股跌至熔断!千亿巨头也崩了,遇到真神东契奇,莫兰特还是差一层级别2023,只求顺其自然,愿您诸事皆顺!为什么国际用黄金作储备,而不是用钻石?体坛爱情佳话,青梅竹马,甜蜜的同姓恋,结婚14年生一儿两女超赵睿离队已成定局?苏群回应让宏远球迷心凉,杜锋或失去双核让你工作6到没朋友的6个网站分享666全面产检时间表及注意事项NBA第12期西部红榜,保罗尽显控场大师本色,詹姆斯依旧攻防中考冲刺口号联想四核智能手机推荐草根还是草根,乌鸡变不成凤凰,旭日阳刚王旭如今落魄到拍短视频小五台东北台一日连穿(并序)今日入正月,阳气始发最关键的一个月,无论多忙,都要做好3宜3君子不器无限可能DIY祛痘面膜天然祛痘小窍门你羡慕别人的生活吗?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形