java String拼接時(shí)的問(wèn)題匯總
剛才發(fā)現(xiàn)了一個(gè)小問(wèn)題,比如我們?cè)O(shè)置一個(gè)字符串對(duì)象test并初始化為null,然后執(zhí)行test+="abc";,此時(shí)test的值不是abc,而是nullabc。這是因?yàn)槲覀儗?shí)際上是讓test="abc"+null;,此時(shí)null會(huì)被強(qiáng)制轉(zhuǎn)為String類型,其值就是"null".例如下面的例子:
String test=null+"abc"; System.out.println(test);
輸出就是nullabc
所以我們?cè)谑褂?=運(yùn)算符的時(shí)候要先判斷是不是null,如果是的話應(yīng)該直接賦值
話又說(shuō)回來(lái),熟悉String原理就能知道,如果使用+=來(lái)創(chuàng)建字符串,會(huì)在字符串常量池中產(chǎn)生很多不需要的子串對(duì)象,所以不鼓勵(lì)使用String的拼接方式一步步創(chuàng)建字符串,應(yīng)該使用StringBuilder 和append()方法。這些類的對(duì)象能夠被多次的修改,并且不產(chǎn)生新的未使用對(duì)象。
并且這兩個(gè)類是提供了append()方法的,可以傳入char或者String,使用很方便。最后要輸出字符串的時(shí)候直接toString()即可。
內(nèi)容擴(kuò)展:
java拼接字符串、格式化字符串方式
//+ String arg0 = "Bob"; String arg1 = "Alice"; System.out.println("hello," + arg0 + ". I am " + arg1 + "."); //StringBuilder.append StringBuilder builder = new StringBuilder(); builder.append("hello,"); builder.append(arg0); builder.append(". I am "); builder.append(arg1); builder.append("."); System.out.println(builder.toString()); //String.format String formatStr = String.format("hello,%s. I am %s.", arg0, arg1); System.out.println(formatStr); //MessageFormat.format String formattedText = MessageFormat.format("hello,{0}. I am {1}.", arg0, arg1); System.out.println(formattedText);
2.運(yùn)行結(jié)果
hello,Bob. I am Alice.
hello,Bob. I am Alice.
hello,Bob. I am Alice.
hello,Bob. I am Alice.
到此這篇關(guān)于java String拼接時(shí)的問(wèn)題匯總的文章就介紹到這了,更多相關(guān)java String拼接時(shí)候的一個(gè)小問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決StringBuffer和StringBuilder的擴(kuò)容問(wèn)題
這篇文章主要介紹了解決StringBuffer和StringBuilder的擴(kuò)容問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Spring的@Autowired加到接口上但獲取的是實(shí)現(xiàn)類的問(wèn)題
這篇文章主要介紹了Spring的@Autowired加到接口上但獲取的是實(shí)現(xiàn)類的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10java判斷中文字符串長(zhǎng)度的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇java判斷中文字符串長(zhǎng)度的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01Java多線程之 FutureTask:帶有返回值的函數(shù)定義和調(diào)用方式
這篇文章主要介紹了Java多線程之 FutureTask:帶有返回值的函數(shù)定義和調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07java實(shí)現(xiàn)利用String類的簡(jiǎn)單方法讀取xml文件中某個(gè)標(biāo)簽中的內(nèi)容
下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)利用String類的簡(jiǎn)單方法讀取xml文件中某個(gè)標(biāo)簽中的內(nèi)容。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12解決myBatis中openSession()自動(dòng)提交的問(wèn)題
在學(xué)習(xí)MySQL過(guò)程中,發(fā)現(xiàn)插入操作自動(dòng)提交,問(wèn)題原因可能是myBatis中的openSession()方法設(shè)置了自動(dòng)提交,或者是MySQL的默認(rèn)引擎設(shè)置為不支持事務(wù)的MyISAM,解決辦法包括更改myBatis的提交設(shè)置或?qū)ySQL表的引擎改為InnoDB2024-09-09基于SpringBoot+Redis的Session共享與單點(diǎn)登錄詳解
這篇文章主要介紹了基于SpringBoot+Redis的Session共享與單點(diǎn)登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07