詳述String類實例化方式及equals與“=”區別

==
我們先來介紹一種關係運算符"==":該運算符用來判斷值是否相等:如果在基本數據類型中,由於變量與值同在棧中,所以比較的是值是否相等

package pro;
public class Test {
public static void main(String[] args) {
int a=12;
int b=12;
System.out.println(a==b);
}

因爲a和b中的數值相等,所以輸出結果爲true。
如果爲引用類型,因爲變量中存的是對象的地址,所以比較的是地值是否相等:

package pro;
public class Test {
public static void main(String[] args) {
Object object1=new Object();
Object object2=new Object();
System.out.println(object1==object2);
}

因爲創建的兩個對象的地址不同,所以輸出結果爲false;
引用類型直接賦值:賦值的內容本身存放在常量池中
創建對象的方式存儲在堆中,兩種方式的型變量存儲在棧中,都是存放的引用內容的地址
對於字符串內容:name.length  name.startsWith(" “)   endsWith   name.equals(” ")派生忽略大小寫的字符串
indexOf方法獲取某個字符串在原來字符串的位置,從0開始
lastIndexOf方法獲取某個字符串在原來字符串的位置,從0開始從後先前,找最後出現的
substring 輸出需要創建對象String sum=letters.substring
String equals只是比較內容是否相同,如果創建的方式不同參照的是equals方法的第二種情況,先判斷是否爲字符串,然會下轉型(需要比較length)比較長度是否相等,左後比較每個字符是否相等
name.trim返回去掉字符串左右兩邊的空格,中間不行

引用對象在堆中,數值或地址的值在棧中

String類是引用數據類型,該類實例化字符串創建方式有兩種:
直接賦值,其語法格式如下:

public class Test {
public static void main(String[] args) {
String str="北京";
System.out.println(str);
}

構造方法實現其實例化,其語法格式如下:

public class Test {
public static void main(String[] args) {
String adress =new String("北京");
System.out.println(str);
}

String類實例化的兩種方式是有區別的:
1、直接賦值,這種方式會出現常量池數據共享的現象(對象存入常量池中;當jvm創建字符串對象前先會去常量池中找有沒有一個字符串內容與當前字符串相同,有:將已有地址賦給變量,無:創建新的對象):

public class Test {
public static void main(String[] args) {
String name1="tom";
String name2="tom";
String name3="Tom";
System.out.println(name1==name2);
System.out.println(name1==name3);


輸出結果爲true
false因爲name2和name1的內容相同, JVM會先比較兩者內容是否相同,相同的話將已經存在的地址賦給變量,name3的內容之前不存在,所以會創建新的對象。
在這裏插入圖片描述
在這裏插入圖片描述
2、new(創建新對象構造方法):直接存入堆內存;每new一次就會創建一個新的對象

public class Test {
public static void main(String[] args) {
String adress=new String("北京");
String adress2=new String("廣東");
System.out.println(adress==adress2);
}

每次都創建一個新的對象,所以內容不相同,輸出結果將會爲false
在這裏插入圖片描述

常用方法

1、length() 該方法返回字符串的長度(包括空格):

public static void String() {
String name="tom";
System.out.println(name.length());//輸出字符串的長度
}

2、startsWith(String value) 判斷字符串是否以value字符串開頭,如果是返回true,否則返回false:
endsWith(String value) 判斷字符串是否以value字符串結尾,如果是返回true,否則返回false:

public static void String() {
String str="USA";
System.out.println(adress.startsWith("US"));//輸出true or false
}

在這裏插入圖片描述
3、equals(String targetString) 用於判斷兩個字符串是否相同,完全相同返回true,否則返回false:

public static void String() {
String name="tom";
String name2="tom";
System.out.println(name .equals(name2));//判斷內容是否相同
}

在這裏插入圖片描述

String 類equals方法和==區別:

在這裏插入圖片描述
如果所比較的兩個變量是引用類型,則==用於比對兩個變量指向的是否爲同一個存放數據的地址;如果是基本數據類型的兩個變量進行比較,則比較的是值是否相等:
在這裏插入圖片描述

**4、equalsIgnoreCase (String value) 用於判斷兩個字符串忽略大小寫後是否相同,相同返回true,否則返回false: **

public static void String() {
String name="tom";
String name2="tom";
String name3="Tom";
System.out.println(name.equalsIgnoreCase(name3));//忽略大小寫的情況下判斷內容是否相同
}

5、toCharArray() 將字符串轉換爲char類型的數組:

public static void String() {
String address="USA";
char[]letters=adress.toCharArray();//{'U''S''A'}
for (char letter : letters) {
System.out.println(letter);
}

6、trim()取消字符串前後兩端的空格

public static void String() {
String adress=" USA ";
System.out.println(adress.trim().length());//trim取消兩端空格
}

7、split():將一個字符串按照指定的字符串進行分割,返回字符串數組

public static void String() {
String mobiles="110#120,119";
String []strs =mobiles.split("#");//{"110""120""119"}將字符串按照某種方式分割成字符串數組
for (String str:strs) {
System.out.println(str);
}

8、replaceAll():將字符串中某些指定的字符串替換成指定的新的字符串

public static void String() {
String mobiles="110#120,119";
mobiles=mobiles.replaceAll("#", ",");
System.out.println(mobiles);
}

9、charAt ():從0開始返回指定參數對應的字符

public static void String() {
String address="USA";
char letter=adress.charAt(1);
System.out.println(letter);//從1開始返回指定參數對應的字符
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章