【Java】字串三種空字串null、new String()、""的區別
今天寫個DEMO的時候碰到了個小麻煩,有關於題目所說的字串這三者的區別,我覺得我真的是夠了,居然會用得這麼細,不過會了也好,碰到相關的問題就可以一言不合程式碼就開寫!
既然研究,那就從結果說起,來看測試程式碼和輸出結果:
// 測試程式碼
package cn.com.dnyy.sn;
public class CheckStringNull {
public static void main(String[] args) {
new CheckStringNull().start();
}
// 執行方法
public void start(){
String blackString = "";// 空字串
String isEmptyString = new String();// isEmpty
String nullString = null;// 空
System.out.println("blackString:" + blackString);
System.out.println("isEmptyString:" + isEmptyString);
System.out.println("nullString:" + nullString);
System.out.println("------------------------------------");
System.out.println("blackString.getBytes().length:" + blackString.getBytes().length);
System.out.println("isEmptyString.getBytes().length:" + isEmptyString.getBytes().length);
//System.out.println("nullString.getBytes().length:" + nullString.getBytes().length);
System.out.println("-----------------------------------------------------");
System.out.println("blackString.isEmpty:" + blackString.isEmpty());
System.out.println("isEmptyString.isEmpty:" + isEmptyString.isEmpty());
//System.out.println("nullString.isEmpty:" + nullString.isEmpty());
System.out.println("-----------------------------------------------------");
System.out.println("\"\".equals(blackString):"+"".equals(blackString));
System.out.println("\"\".equals(isEmptyString):"+"".equals(isEmptyString));
System.out.println("\"\".equals(nullString):"+"".equals(nullString));
System.out.println("-----------------------------------------------------");
System.out.println("blackString==null:" + blackString==null);
System.out.println("isEmptyString==null:" + isEmptyString==null);
System.out.println("nullString==null:" + nullString==null);
System.out.println("-----------------------------------------------------");
System.out.println("blackString.equals(isEmptyString):" + blackString.equals(isEmptyString));
System.out.println("blackString == isEmptyString:" + blackString == isEmptyString);
}
}
輸出結果:
blackString:
isEmptyString:
nullString:null
-----------------------------------------------------
blackString.getBytes().length:0
isEmptyString.getBytes().length:0
-----------------------------------------------------
blackString.isEmpty:true
isEmptyString.isEmpty:true
-----------------------------------------------------
"".equals(blackString):true
"".equals(isEmptyString):true
"".equals(nullString):false
-----------------------------------------------------
blackString==null:false
isEmptyString==null:false
nullString==null:false
-----------------------------------------------------
blackString.equals(isEmptyString):true
blackString == isEmptyString:false
由上面的輸出結果可以看得出以下幾點
1、String nullString = null;
這種定義方式表示這個變數是沒有被分配記憶體的,原始碼裡面如果執行被註釋掉的程式碼則會報空指標異常java.lang.NullPointerException的錯誤,由此可以證明記憶體並沒有分配;
2、String isEmptyString = new String();
這種定義方式會給isEmptyString變數分配出相應的記憶體,而由於new String()中的引數為空,則其實質上是一個有分配記憶體,但是值為空的一個變數;
3、String blackString = "";
這種定義方式和前者new String()的定義方式同樣的都會分配出記憶體給這個變數,但與之不同的是,這種定義方式較之前者而言,相當於是new String(“”)定義的,擁有了引數(即呼叫了不同的構造方法)之後,blackString則是一個既有記憶體分配又有值(這個值是一個空的字串)的變數。
由此大致能夠讓大家區分了一下這三者之前的區別和聯絡,希望對大家今後敲程式碼的過程中有所幫助!謝謝大家!
相關推薦
【Java】字串三種空字串null、new String()、""的區別
今天寫個DEMO的時候碰到了個小麻煩,有關於題目所說的字串這三者的區別,我覺得我真的是夠了,居然會用得這麼細,不過會了也好,碰到相關的問題就可以一言不合程式碼就開寫! 既然研究,那就從結果說起,來看測試程式碼和輸出結果: // 測
【JAVA】逢三退一的第二種思路(面向物件)
提供第二種思路: 題目:500個小孩手拉手圍成一圈,每個小孩有一編號,數數,當數到第三個時,將該小孩刪除,求最後剩下的那個小孩是這500個小孩中的第幾個。 面向物件程式設計,首先分析,有多少個物件? 兩個。 1.小孩 成員特點: a.需要有編號 b.圓圈,需要有左孩子,l
【Java】StringBuffer的append()對字串追加
public class Test{ public static void main(String[] args){ StringBuffer sys=new StringBuffer("校內課
【Java】廣州三本秋招經歷
前言 只有光頭才能變強 離上次發文章已經快兩個月時間了,最近一直忙著秋招的事。今天是2018年10月22日,對於網際網路行業來說,秋招就基本結束了。我這邊的流程也走完了(不再筆試/面試了),所以來寫寫我的秋招經歷吧~ 這次的秋招可謂收穫很多: 成功收到了4399、唯品會等幾十家公司的感謝信,成功加入人才
【JAVA】數三退一問題的解決
數三退一: 500個小孩手拉手圍成一圈,從第一個小孩開始數數,按照1、2、3、1、2、3迴圈不斷的數,數到3的小孩退出圈,其他小孩接著數,直到剩下一個小孩,問這個小孩的排在什麼位置? 思路分析:可以定
【Java】(三)運算子小結(比較、邏輯、三元運算子)
前面介紹的兩種運算子都比較簡單,下面我們來看一下比較複雜一點的三種運算子:比較運算子、邏輯運算子、三元運算子。 一、比較運算子 又叫關係運算符,用於判斷兩個被運算元的
【SSH】——Hibernate三種狀態之間的轉化
Hibernate的三種狀態為:transient、persistent和detached。對這三種狀態的理解可以結合Session快取,在Session快取中的狀態為persistent,另外兩種不在Session中。 另一種說法是,Hibernate
java java中subString、split、stringTokenizer三種擷取字串方法的效能比較
面試的時候,string 基本上是必須問的知識 突然想起面試的時候曾經被人問過:都知道在大資料量情況下,使用String的split擷取字串效率很低,有想過用其他的方法替代嗎?用什麼替代?我當時的回答很斬釘截鐵:沒有。 google了一下,發現有2中替代方法,於
【Java】 劍指offer(46) 把數字翻譯成字串 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集
本文參考自《劍指offer》一書,程式碼採用Java語言。 更多:《劍指Offer》Java實現合集 題目 給定一個數字,我們按照如下規則把它翻譯為字串:0翻譯成"a",1翻譯成"b",……,11翻譯成"l",……,25翻譯成"z"。一個數字可能有多個翻譯。例如12258有
【Java】 劍指offer(48) 最長不含重複字元的子字串 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集
本文參考自《劍指offer》一書,程式碼採用Java語言。 更多:《劍指Offer》Java實現合集 題目 請從字串中找出一個最長的不包含重複字元的子字串,計算該最長子字串的長度。假設字串中只包含從'a'到'z'的字元。 思路 動態規劃法:定義函式f(i)為:以第i
【java】定義一個字串(可以改進為鍵盤錄入)-Scanner
package test922; import java.util.Scanner; public class ScanerTest { private static Scanner sc; public static void main(final String[
【Java】給定一個字串str,和一個字母ch,請實現相應的程式碼求出一個數組,使陣列中每個數字表示該位置與字母ch之間的最短距離。 比如str=”lexinfintech” ch=”i” 則輸出為:[3,2,1,0,1,1,0,1,2,3,4,5]
import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * @author: ycz * @date: 2018/12/17 0017 16:43 * @description: */ p
【java】java判斷字串A中是否包含字串B
public static void main(String[] args) { String str="ABC_001"; if(str.indexOf("ABC")!=-1){ S
【Java】檢查字串s2是否為s1旋轉而成
假定有一個方法isSubstring,可以檢查一個單詞是否為其他字串的子串。給定兩個字串S1和S2,請編寫程式碼檢查s2是否為s1旋轉而成,要求只能呼叫一次isSubstring。 比如“waterbottle”是“erbottlewat”旋轉後的字串 s1 = water
格式化字串-String.format()的使用【Java】
常規型別的格式化 String類的format()方法用於建立格式化的字串以及連線多個字串物件。熟悉C語言的同學應該記得C語言的sprintf()方法,兩者有類似之處。format()方法有兩種過載形式。 format(String format, Object… args) 新字串
【Java】Date與字串String 相互轉化的方法
Date -> String 理解Date類和Date轉 String的方法 可以參考我寫的另一篇文章 – Java用Date類獲取當前時間戳、時間戳的格式轉換方法,就不在多贅述了 String -> Date 方法與Date轉String非常的類似,需要用
【java】計算字串的MD5值
直接上程式碼 import java.security.MessageDigest; public static String MD5(String key) { char hexDigits[] = { '0', '1', '2', '3', '4
【java】字串比較分析
在敘述String類知識點的部落格中提到了字串比較有如下兩種方式: == 和 .equals() 前者是比較變數所指向的值在堆空間上的記憶體地址值。 後者是比較字串的值。 接下來將對上述兩種方式進行分析: 使用“==”比較字串: 有如下程式碼: String str1 = "
【Java】編寫一個方法,實現基本的字串壓縮功能
利用重複字元出現的次數,編寫一個方法,實現基本的字串壓縮功能。 例如,字串aabcccccaaa會變為a2b1c5a3。若壓縮後的字串沒有變短,則返回原先的字串。 StringBuffer: 如果頻繁地對字串進行拼接,直接用“+”的話會建立很多String型的物件,對伺服器
【JAVA】java中實現map集合的資料存取詳解三種方法。Android程式設計師也是要會寫的
長期維護的Android專案,裡面包括常用功能實現,以及知識點詳解, 當然還有java中的知識點。具體請看github: https://github.com/QQ986945193/DavidAndroidProjectTools 好了,說正題