Java中如何正確定義字符串
前言
字符串是 Java 中特殊的類,使用方法像一般的基本數(shù)據(jù)類型,被廣泛應(yīng)用在 Java 編程中。Java 沒有內(nèi)置的字符串類型,而是在標(biāo)準(zhǔn) Java 類庫中提供了一個 String 類來創(chuàng)建和操作字符串。
在 Java 中定義一個字符串最簡單的方法是用雙引號把它包圍起來。這種用雙引號括起來的一串字符實際上都是 String 對象,如字符串“Hello”在編譯后即成為 String 對象。因此也可以通過創(chuàng)建 String 類的實例來定義字符串。
不論使用哪種形式創(chuàng)建字符串,字符串對象一旦被創(chuàng)建,其值是不能改變的,但可以使用其他變量重新賦值的方式進行更改。
一、直接定義字符串
直接定義字符串是指使用雙引號表示字符串中的內(nèi)容,例如“Hello Java”、“Java 編程”等。具體方法是用字符串常量直接初始化一個 String 對象,示例如下:
String str = "Hello Java"; String str; str = "Hello Java";
舉例說明:
String str = "我是一只小小鳥"; // 結(jié)果:我是一只小小鳥 String word; word = "I am a bird"; // 結(jié)果:I am a bird word = "<h1>to fly</h1>"; // 結(jié)果:<h1>to fly</h1> word = "Let\'s say that it\'s true"; // 結(jié)果:Let's say that it's true System.out.println(word); word = "北京\\上海\\廣州"; // 結(jié)果:北京\上海\廣州
二、使用 String 類定義
String 類的構(gòu)造方法有多種重載形式,每種形式都可以定義字符串。下面介紹最常用的幾種形式。
1. String()
初始化一個新創(chuàng)建的 String 對象,表示一個空字符序列。
2. String(String original)
初始化一個新創(chuàng)建的 String 對象,使其表示一個與參數(shù)相同的字符序列。換句話說,新創(chuàng)建的字符串是該參數(shù)字符串的副本。例如:
String str1 = new String("Hello Java"); String str2 = new String(str1);
這里 str1 和 str2 的值是相等的。
3. String(char[ ]value)
分配一個新的字符串,將參數(shù)中的字符數(shù)組元素全部變?yōu)樽址?。該字符?shù)組的內(nèi)容已被復(fù)制,后續(xù)對字符數(shù)組的修改不會影響新創(chuàng)建的字符串。例如:
char a[] = {'H','e','l','l','0'}; String sChar = new String(a); a[1] = 's';
上述 sChar 變量的值是字符串“Hello”。 即使在創(chuàng)建字符串之后,對 a 數(shù)組中的第 2 個元素進行了修改,但未影響 sChar 的值。
4. String(char[] value,int offset,int count)
分配一個新的 String,它包含來自該字符數(shù)組參數(shù)一個子數(shù)組的字符。offset 參數(shù)是子數(shù)組第一個字符的索引,count 參數(shù)指定子數(shù)組的長度。該子數(shù)組的內(nèi)容已被賦值,后續(xù)對字符數(shù)組的修改不會影響新創(chuàng)建的字符串。例如:
char a[]={'H','e','l','l','o'}; String sChar=new String(a,1,4); a[1]='s';
上述 sChar 變量的值是字符串“ello”。該構(gòu)造方法使用字符數(shù)組中的部分連續(xù)元素來創(chuàng)建字符串對象。offset 參數(shù)指定起始索引值,count 指定截取元素的個數(shù)。創(chuàng)建字符串對象后,即使在后面修改了 a 數(shù)組中第 2 個元素的值,對 sChar 的值也沒有任何影響。
附:字符串轉(zhuǎn)換與截取
字符串拼接的底層原理
1)如果沒有變量參與,都是字符串直接相加,編譯之后就是拼接的結(jié)果,會復(fù)用串池中的字符串。
2)如果有變量參與,每一行拼接的代碼,都會在內(nèi)存中創(chuàng)建新的字符串,浪費內(nèi)存。
public class Test{ public static void main(String[] args){ String s1 = "abc"; String s2 = "ab"; String s3 = s2+"c"; String s4 = "a"+"b"+"c"; System.out.println(s1 == s3); //false,因為s3有變量相加,會創(chuàng)建新的字符串 System.out.println(s1 == s4); //true, s4沒有變量參與,會復(fù)用已存在的字符串,與s1地址一樣 } }
字符轉(zhuǎn)換成int型
char ch = str.charAt(i); int n = ch -48; //48代表字符‘0'
修改字符串內(nèi)容
1)使用subString截取
String s = "abcd"; char ch = s.charAt(0); //拿到第一個字符 String se = s.subString(1); //拿到從1開始的字符串至結(jié)尾 return se + ch; //拼接成新的字符串
2)將字符串變?yōu)樽址麛?shù)組,操作完再將其轉(zhuǎn)化為字符串
String s = "abcd"; char[] cs = s.toCharArray(); char first = cs[0]; //拿到第一個字符 for(int i = 1; i < cs.length; i++ ){ cs[i-1] = cs[i]; //將后面的字符依次前移 } cs[cs.length-1] = first; //將第一個字符放到最后 String str = new String(cs); //創(chuàng)建新字符串 return str;
總結(jié)
到此這篇關(guān)于Java中如何正確定義字符串的文章就介紹到這了,更多相關(guān)Java定義字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot開發(fā)實戰(zhàn)系列之動態(tài)定時任務(wù)
在我們?nèi)粘5拈_發(fā)中,很多時候,定時任務(wù)都不是寫死的,而是寫到數(shù)據(jù)庫中,從而實現(xiàn)定時任務(wù)的動態(tài)配置,下面這篇文章主要給大家介紹了關(guān)于SpringBoot開發(fā)實戰(zhàn)系列之動態(tài)定時任務(wù)的相關(guān)資料,需要的朋友可以參考下2021-08-08springmvc項目使用@Valid+BindingResult遇到的問題
這篇文章主要介紹了springmvc項目使用@Valid+BindingResult遇到的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12MAC上IntelliJ IDEA的svn無法保存密碼解決方案
今天小編就為大家分享一篇關(guān)于MAC上IntelliJ IDEA的svn無法保存密碼解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10Java框架Quartz中API、Jobs和Trigger詳解
這篇文章主要介紹了Java框架Quartz中API、Jobs和Trigger詳解,JobDetail?對象是在將?job?加入?scheduler?時,由客戶端程序(你的程序)創(chuàng)建的,它包含?job?的各種屬性設(shè)置,以及用于存儲?job?實例狀態(tài)信息的?JobDataMap,需要的朋友可以參考下2023-11-11詳解MybatisPlus中@TableLogic注解的使用
@TableLogic一般用于實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)邏輯刪除,本文我們將介紹 @TableLogic 注解的用法,以及每個屬性的實際意義和用法,感興趣的可以了解一下2022-06-06