Java基礎之字串String詳細解釋
字串常量不可變
底層原碼中使用final修飾 char[] value來儲存字串的值。字串常量是存在常量池中,一旦宣告,就不可以改變,同時常量池中不會儲存相同內容的字串,即s1與s2是相等的。
String s1 = "aaa";
s1 = "bbb";
System.out.println(s1);
String s1 = "123";
String s2 = "123";
System.out.println(s1==s2);
輸出的s1的值是bbb,不是改變了麼?注意這裡的s1是引用物件,因此s1存在棧空間中,也就是s1與aaa並不存在同一記憶體空間中,只是中間連線了一條繩子將aaa指向了s1,現在這條繩子由bbb指向了s1,但是aaa其實還留在了常量池中,所以說字串常量是不可改變的。
除此之外,String還實現了Serializable介面,表示字串可以被序列化,還實現了Comparable介面表示字串可以比較大小
null," "的區別
String s1 = null
String s2 = ""
null代表的是空物件,並不是字串,可以賦給任何物件,字串中表示只是一個引用,還沒有記憶體空間的分配
“ ”表示引用已經指向了 一塊記憶體空間了,是一個實際的東西,可以進行操作了,表示一個長度為0的字串
陣列轉成字串(String的構造)
String():構造一個空的字串
String(byte[] arr): 將位元組陣列變為一個字串
String(byte[] arr, int offset, int lengh): 將位元組陣列部分變為字串
String(char[] arr): 將char位元組陣列變為字串
String(char[] arr, int offset, int length): 將char位元組陣列部分變為字串
String(String original): 字串常量構建字串
byte[]===>String
全部轉換:轉換所有byte數 據 .zykdtj.com/
byte[] b = {97,98,99,100};
String str = new String(b);
System.out.println(str);//abcd
部分轉換: 擷取轉換,超出索引,報出StringIndexOutOfBoundsException異常,通常Java中陣列索引區間左開右閉的
byte[] b = {97,98,99,100};
String str = new String(b,1,3);
System.out.println(str);//bc
char[]轉String等等一些陣列轉String的方式都和上述大同小異,這些都是對String方法使得構造
==與equals()的比較字串是否相等
== 比較的地址和內容都相等才相等
equals()內容相等即是相等
理解上面兩句:
String s1 = "123";①
String s2 = "123";②
String s3 = new String("123");③
System.out.println(s1==s2);//正確
System.out.println(s1==s3);//錯誤
5
只要明白了記憶體分佈,判斷不成問題。對於①,②來說,上面已經解釋過了都在棧記憶體中,對於③來說,s3是物件存在Java堆中,s1,s2都是存在Java棧中,所以s1==s3是錯誤的!!!對於equals()就不一樣了三者內容都是相等的。
練習一:
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
String s5 = "hello";
String s6 = "hello";
System.out.println(s5==s6);
System.out.println(s5.equals(s6)
字串的拼接
常量與常量的拼接還在常量池中
常量池不可有相同的常量
拼接的時候,只要存在變數都會存到堆中
呼叫intern()方法返回常量池裡面的常量
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3==(s1+s2));//F 變數的連線存在堆中不相等
System.out.println(s3==(s1+s2).intern());//T 獲取的是值相等
System.out.println(s3.equals(s1+s2));//T 獲取內容相等
System.out.println(s3=="hello" + "world");//T 常量與常量連線還在常量池中
System.out.println(s3.equals("hello"+"world"));//T 內容相等
字串操作常用方法
字串的判斷:
equals方法比較兩個字串內容是否相等
equalsIgnorecase忽略大小寫比較兩個物件是否相等
contains是否包含字串
startsWith()是否以指定的字串開頭
endsWIth()是否以指定的字串結尾
isEmpty()是否為空
String s1 = "abcde";
String s2 = "AbCde";
String s3 = "abcde";
//equals
System.out.println(s1.equals(s2));//t
System.out.println(s1.equals(s3));//f
//equalsIgnorecase
System.out.println(s1.equalsIgnoreCase(s2));//t
System.out.println(s1.equalsIgnoreCase(s3));//t
//是否包含指定字串
System.out.println(s1.contains("bd"));//f
//是否以指定字串開頭
System.out.println(s1.startsWith("ab"));//t
System.out.println(s1.startsWith("cde",2));//t 字串是否在索引2開始擷取
//是否以字串結尾
System.out.println(s1.endsWith(s3));//t
//是否為空
System.out.println(s1.isEmpty());//false
18
字串的獲取
length():字串的長度
charAt(inx index):返回某個字元在字串中的索引
indexOf(int ch):獲取指定的字元在字串第一次出現的位置,可以寫對應的ASCALL碼值
indexOf(int ch, int fromIndex):從指定的索引開始,字元出現的位置
indexOf(String str):獲取指定的字串在原字串的位置
indexOf(String str, int fromIndex):從指定的索引開始,獲取字串第一次出現的位置
lastIndexOf(int ch):獲取指定字元最後一次出現的索引值
lastIndexOf(String str,int fromIndex)獲取指定字串最後出現的索引值
subString(int start):從指定位置開始擷取字串
subString(int start, int end)從指定位置到指定位置擷取字串
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69979119/viewspace-2704990/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 基礎 01-String 詳解Java
- Java基礎1-String詳解Java
- java基礎:String — 字串常量池與intern(二)Java字串
- java基礎之:迭代器詳解Java
- Java String 詳解Java
- 超詳細Java基礎-多型Java多型
- [java基礎]之註釋Java
- java基礎詳解-集合Java
- 【ES6基礎】模板字串(Template String)字串
- Python基礎之好玩的字串格式化f-string格式Python字串格式化
- O(nlogn)快速排序-基礎版+詳細註釋排序
- java繼承基礎詳解Java繼承
- Java基礎-泛型詳解Java泛型
- Java基礎系列—字串Java字串
- Java-string字串Java字串
- python基礎之字串Python字串
- 最詳細的JavaWeb開發基礎之java環境搭建(Mac版)JavaWebMac
- 最詳細的JavaWeb開發基礎之java環境搭建(Windows版)JavaWebWindows
- Java基礎-內部類詳解Java
- Flutter 基礎Widgets之AppBar詳解FlutterAPP
- Java基礎之二_字串Java字串
- C++中string字串的基礎操作,學習C++字串
- 【詳細】Python基礎(一)Python
- PHP 詳細面試總結 (三 Redis 基礎詳解)PHP面試Redis
- Java基礎類String學習分析Java
- java基礎:String — 原始碼分析(一)Java原始碼
- Servlet、HTTP詳細解釋!ServletHTTP
- JPS 命令詳細解釋
- Java基礎:throw和throws的詳解Java
- Go 語言基礎之 Context 詳解GoContext
- Python基礎之七:編碼詳解Python
- Flutter 基礎Widgets之容器Container詳解FlutterAI
- Javascript之字串拼接詳解JavaScript字串
- Java中String,StringBuffer,StringBuilder基礎知識JavaUI
- java基礎(五) String性質深入解析Java
- C++之string型別詳解C++型別
- Application.Caller詳細解釋APP
- 《Java工程師成神之路-基礎篇》Java基礎知識——String相關Java工程師