常見物件-String類
String類的構造方法:
package cn.itcast_01;
/*
* 字串:就是由多個字元組成的一串資料。也可以看成是一個字元陣列。
* 通過檢視API,我們可以知道
* A:字串字面值"abc"也可以看成是一個字串物件。
* B:字串是常量,一旦被賦值,就不能被改變。
*
* 構造方法:
* public String():空構造
* public String(byte[] bytes):把位元組陣列轉成字串
* public String(byte[] bytes,int index,int length):把位元組陣列的一部分轉成字串
* public String(char[] value):把字元陣列轉成字串
* public String(char[] value,int index,int count):把字元陣列的一部分轉成字串
* public String(String original):把字串常量值轉成字串
*
* 字串的方法:
* public int length():返回此字串的長度。
*/
public class StringDemo {
public static void main(String[] args) {
// public String():空構造
String s1 = new String();
System.out.println("s1:" + s1); //s1:
System.out.println("s1.length():" + s1.length()); //s1.length():0
// public String(byte[] bytes):把位元組陣列轉成字串
byte[] bys = { 97, 98, 99, 100, 101 };
String s2 = new String(bys);
System.out.println("s2:" + s2); //s2:abcde
System.out.println("s2.length():" + s2.length()); //s2.length():5
// public String(byte[] bytes,int index,int length):把位元組陣列的一部分轉成字串
// 我想得到字串"bcd"
String s3 = new String(bys, 1, 3);
System.out.println("s3:" + s3); //s3:bcd
System.out.println("s3.length():" + s3.length()); //s3.length():3
// public String(char[] value):把字元陣列轉成字串
char[] chs = { 'a', 'b', 'c', 'd', 'e', '愛', '林', '親' };
String s4 = new String(chs);
System.out.println("s4:" + s4); //s4:abcde愛林親
System.out.println("s4.length():" + s4.length()); //s4.length():8
// public String(char[] value,int index,int count):把字元陣列的一部分轉成字串
String s5 = new String(chs, 2, 4);
System.out.println("s5:" + s5); //s5:cde愛
System.out.println("s5.length():" + s5.length()); //s5.length():4
//public String(String original):把字串常量值轉成字串
//這樣寫意義不大
String s6 = new String("abcde");
System.out.println("s6:" + s6); //s6:abcde
System.out.println("s6.length():" + s6.length()); //s6.length():5
//字串字面值"abc"也可以看成是一個字串物件。
String s7 = "abcde";
System.out.println("s7:"+s7); //s7:abcde
System.out.println("s7.length():"+s7.length()); //s7.length():5
//補充:最後一個這樣寫比較好,大部分情況下用這個,總之要知道位元組陣列和字元陣列都可以轉成字串
}
}
String的特點一旦被賦值就不能改變:
package cn.itcast_02;
/*
* 字串的特點:一旦被賦值,就不能改變。
*/
public class StringDemo {
public static void main(String[] args) {
String s = "hello";
s += "world";
System.out.println("s:" + s); // helloworld
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------
面試題:String字面值物件和構造方法建立物件的區別
package cn.itcast_02;
/*
* String s = new String(“hello”)和String s = “hello”;的區別?
* 有。前者會建立2個物件,後者建立1個物件。
*
* ==:比較引用型別比較的是地址值是否相同
* equals:比較引用型別預設也是比較地址值是否相同,而String類重寫了equals()方法,比較的是內容是否相同。
*/
public class StringDemo2 {
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = "hello";
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2));// true
}
}
看程式寫結果:
package cn.itcast_02;
/*
* 看程式寫結果
*/
public class StringDemo3 {
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2));// true
String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3 == s4); // false
System.out.println(s3.equals(s4));// true
String s5 = "hello";
String s6 = "hello";
System.out.println(s5 == s6); // true
System.out.println(s5.equals(s6));// true
}
}
package cn.itcast_02;
/*
* 看程式寫結果
* 字串如果是變數相加,先開空間,再拼接。
* 字串如果是常量相加,是先加,然後在常量池找,如果有就直接返回,否則,就建立。
*/
public class StringDemo4 {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3 == s1 + s2); // false,變數相加,先開空間,再拼接
System.out.println(s3.equals((s1 + s2)));// true
// 通過反編譯看原始碼,我們知道這裡已經做好了處理。
System.out.println(s3 == "hello" + "world"); // true,常量相加,是先加,然後在常量池找,如果有就直接返回
// System.out.println(s3 == "helloworld");
System.out.println(s3.equals("hello" + "world"));// true
}
}
String類的判斷功能:
package cn.itcast_03;
/*
* String類的判斷功能:
* boolean equals(Object obj):比較字串的內容是否相同,區分大小寫
* boolean equalsIgnoreCase(String str):比較字串的內容是否相同,忽略大小寫
* boolean contains(String str):判斷大字串中是否包含小字串
* boolean startsWith(String str):判斷字串是否以某個指定的字串開頭
* boolean endsWith(String str):判斷字串是否以某個指定的字串結尾
* boolean isEmpty():判斷字串是否為空。
*
* 注意:
* 字串內容為空和字串物件為空這是兩個東西
* 內容為空: String s = ""; 但是它是物件
* 物件為空: String s = null;物件都不存在哪能調方法呀
*/
public class StringDemo {
public static void main(String[] args) {
// 建立字串物件
String s1 = "helloworld";
String s2 = "helloworld";
String s3 = "HelloWorld";
// boolean equals(Object obj):比較字串的內容是否相同,區分大小寫
System.out.println("equals:" + s1.equals(s2)); //true
System.out.println("equals:" + s1.equals(s3)); //false
// boolean equalsIgnoreCase(String str):比較字串的內容是否相同,忽略大小寫
System.out.println("equals:" + s1.equalsIgnoreCase(s2)); //true
System.out.println("equals:" + s1.equalsIgnoreCase(s3)); //true
// boolean contains(String str):判斷大字串中是否包含小字串
System.out.println("contains:" + s1.contains("hello")); //true
System.out.println("contains:" + s1.contains("hw")); //false,h和w必須連一起的
// boolean startsWith(String str):判斷字串是否以某個指定的字串開頭
System.out.println("startsWith:" + s1.startsWith("h")); //true
System.out.println("startsWith:" + s1.startsWith("hello"));//true
System.out.println("startsWith:" + s1.startsWith("world"));//false
// 練習:boolean endsWith(String str):判斷字串是否以某個指定的字串結尾這個自己玩
// boolean isEmpty():判斷字串是否為空。
System.out.println("isEmpty:" + s1.isEmpty()); //false
String s4 = "";
System.out.println("isEmpty:" + s4.isEmpty()); //true
String s5 = null;
// s5物件都不存在,所以不能呼叫方法,空指標異常
System.out.println("isEmpty:" + s5.isEmpty());// NullPointerException
}
}
補充:
String中對NULL和""的判斷:
//錯誤用法一:
if (name == "") {
//do something
}
//錯誤用法二:
if (name.equals("")) {
//do something
}
//錯誤用法三:
if (!name.equals("")) {
//do something
}
//正確的寫法應該先加上name != null的條件,如例:
if (name != null && !name.equals("")) {
//do something
}
//或者
if (!"".equals(name)) {//將""寫在前頭,這樣,不管name是否為null,都不會出錯。
//do something
}
再補充:
1.
null表示這個字串不指向任何的東西,如果這時候你呼叫它的方法,那麼就會出現空指標異常。
""表示它指向一個長度為0的字串,這時候呼叫它的方法是安全的。
2.
null不是物件,""是物件,所以null沒有分配空間,""分配了空間,例如:
String s1= ""; s1引用一個空串,s1已經例項化
String s2 = null; s2引用為空,s2還不是一個例項化的物件
3.
物件用equals比較,null用等號比較。
如果str=null;下面的寫法錯誤:
if(str.equals("")||str==null){
正確的寫法是:
//先判斷是不是物件,如果是,再判斷是不是空字串
if(str==null||str.equals("")){
}
4.
判斷一個字串是否為空,首先就要確保他不是null,然後再判斷他的長度。
String str = xxx;
if(str != null && str.length() != 0) {
}
再補充:今天看到我們專案中判斷字串是否為空是這樣寫的
if(str == null || str.trim().length() <= 0){
}
5.判斷字串是否為空的效率
補充:如果在其他類中想要呼叫Hello類中的function2()方法,要麼將方法加static改成靜態方法,要麼new出Helllo物件調function2()方法
參考:http://blog.csdn.net/qq_27918787/article/details/52506406
相關文章
- 常見物件-String類-2物件
- 常見物件-String類-3物件
- 常見物件-String類-4物件
- Java程式設計基礎13——常見物件_String類Java程式設計物件
- 常見物件-Object類物件Object
- 常見物件-Scanner類物件
- 常見物件-String類的compareTo()方法的原始碼解析物件原始碼
- 常見物件-Arrays工具類物件
- 常見物件-基本型別包裝類物件型別
- 常見物件-StringBuffer和String的相互轉換物件
- String常見面試題面試題
- 常見物件-Character物件
- Java Object類 和 String類 常見問答 6k字+總結JavaObject
- 常見物件-BigInteger物件
- 常見物件-BigDecimal物件Decimal
- Java面試鍊金系列 (1) | 關於String類的常見面試題剖析Java面試題
- 【答疑】物件儲存OSS常見問題解答(工具類1)物件
- 常見物件-StringBuffer物件
- js常見物件及方法JS物件
- 【答疑】物件儲存OSS常見問題解答(諮詢類2)物件
- 【答疑】物件儲存OSS常見問題解答(諮詢類1)物件
- 常見物件-字串的遍歷物件字串
- 常見儲存器分類
- Java 的常見 API 與物件克隆)JavaAPI物件
- 常見物件-字串反轉的案例物件字串
- 常見物件-字串反轉功能案例物件字串
- RAC(Reactive Cocoa)常見的類React
- Android 常見工具類封裝Android封裝
- 類别範本的常見用法
- 常見問題--oracle物件不存在Oracle物件
- JDK1.8原始碼解析(常見類)JDK原始碼
- 一些常見的C#類C#
- ASP.NET常見物件之Request與ResponseASP.NET物件
- 常見物件-模擬使用者登入案例物件
- 常見物件-把int陣列拼接字串的案例物件陣列字串
- shell教程-002:常見的Shell種類
- 機器學習常見演算法分類彙總機器學習演算法
- 《Java從入門到失業》第四章:類和物件(4.2):String類Java物件