1. 程式人生 > >【Java】字串三種空字串null、new String()、""的區別

【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字串字串nullnew String()""的區別

      今天寫個DEMO的時候碰到了個小麻煩,有關於題目所說的字串這三者的區別,我覺得我真的是夠了,居然會用得這麼細,不過會了也好,碰到相關的問題就可以一言不合程式碼就開寫!       既然研究,那就從結果說起,來看測試程式碼和輸出結果: // 測

JAVA退一的第二思路(面向物件)

提供第二種思路: 題目:500個小孩手拉手圍成一圈,每個小孩有一編號,數數,當數到第三個時,將該小孩刪除,求最後剩下的那個小孩是這500個小孩中的第幾個。 面向物件程式設計,首先分析,有多少個物件? 兩個。 1.小孩 成員特點: a.需要有編號 b.圓圈,需要有左孩子,l

JavaStringBuffer的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中subStringsplitstringTokenizer擷取字串方法的效能比較

面試的時候,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[

javajava判斷字串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) 新字串

JavaDate與字串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型的物件,對伺服器

JAVAjava中實現map集合的資料存取詳解方法。Android程式設計師也是要會寫的

長期維護的Android專案,裡面包括常用功能實現,以及知識點詳解, 當然還有java中的知識點。具體請看github: https://github.com/QQ986945193/DavidAndroidProjectTools 好了,說正題