java中字符串比較的問題


我也是個小白,理解的可能有誤,各位倘若看到一定要帶思考的去看。

 

一、關於基本類型與引用類型

1.基本類型:  

全在   棧空間:名字--具體值

整型:byte short  int  long

浮點型:float double 

邏輯型:boolean 

字符型:char

2.引用類型:   棧空間:名字--地址(用於在堆空間尋找)      堆空間:具體值

類、接口、數組

 

二、創建字符串的兩種方式

1.字面量賦值方式  String a = "ttt";  

該種直接賦值的方法,JVM會去字符串常量池(String對象不可變)中尋找是否有equals("ttt")的String對象,如果有,就把該對象在字符串常量池中"ttt"的引用復制給字符串變量a,如若沒有,就在堆中新建一個對象,同時把引用駐留在字符串常量池中,再把引用賦給字符串變量str。


2.new關鍵字創建新對象  String b = new String("ttt"); 

利用new來創建字符串時,無論字符串常量池中是否有與當前值相同的對象引用,都會在堆中新開辟一塊內存,創建一個新的對象。

 

注:字符串無法被修改(String對象不可變):
eg:

String str1 = new String("ttttttt"); 
str1 = "yyyyyyy";

對str1重新賦值后  ttttttt這個String對象在堆空間中並沒有消失 

即在堆空間中新建一個字符串yyyyyy 不再指向ttttttt 而是重新指向yyyyyyyy的首地址

 

 

 

三、關於字符串的比較

 

String str1 = "ttt";
String str2 = "ttt";
String str3 = new String("ttt");

 三個字符串變量的創建過程如下

 

1.equals:值比較

2.==:地址(引用)比較

例一:

String a = "ttt";
String b = "ttt";

 equals相等   ==相等  

例二:

String a = new String("ttt");

String b = new String("ttt");

 equals相等   ==不相等   

例三: 

String a = "ttt";
String b = new String("ttt");

equals相等   ==不相等 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM