1. 程式人生 > >Java中String類的isEmpty方法、null以及""的區別

Java中String類的isEmpty方法、null以及""的區別

一直以來對String的這三個空挺暈的,剛好同事問我,我也學習下。

從別人部落格上看到的是這樣的:
    isEmpty()
        分配了記憶體空間,值為空,是絕對的空,是一種有值(值 = 空)  
    ""
        分配了記憶體空間,值為空字串,是相對的空,是一種有值(值 = 空字串)  
    null
        是未分配記憶體空間,無值,是一種無值(值不存在)


然而我還是挺暈忽 所以寫了個demo驗證下~

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); String a = new String(); String b = ""; String c = null; testString(a); testString(b); testString(c); } private void testString(String str){ if (str == null){ Log.e("testNull", "null"); } if (str.isEmpty()){ Log.e("testNull", "isEmpty"
); } if (str.equals("")){ Log.e("testNull", "引號"); } Log.e("testNull", "----------------"); }

由於只會玩Android,就寫了個Android的demo。效果一樣啦~
打log結果為:
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: isEmpty
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: 引號
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: ----------------
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: isEmpty

02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: 引號
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: ----------------
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: null

再然後str就報空指標錯誤了~這裡可以發現好像isEmpty和""的效果是一樣滴啊。
又看了下isEmpty的原始碼:

public boolean isEmpty() {
    return count == 0;
}
就是說只要String的文字數量為0就返回true,而""裡面文字數量就是為0。

綜上所述:
    null是未分配記憶體空間的“空”~
    isEmpty和引號這兩個“空”與null相對(即它們 != null),且都是已分配記憶體(好像差不多一個意思)

(PS:尚不清楚isEmpty和""是否有何不同之處,有知道的小夥伴希望可以評論告知,謝謝~)

相關推薦

javaString常用方法屬性等

col clas equal ack length ++ ava eal rgs package Head18; public class java09 { public static void main(String[] args) { St

JavaStringisEmpty方法null以及""的區別

一直以來對String的這三個空挺暈的,剛好同事問我,我也學習下。從別人部落格上看到的是這樣的:     isEmpty()         分配了記憶體空間,值為空,是絕對的空,是一種有值(值 =

JavaString常用方法(轉)

轉自:https://blog.csdn.net/kaishizhangcheng/article/details/52332543int indexOf(String str)該方法用於返回當給定字串在當前字串中的位置,若當前字串不包含給定字串則返回-1。過載的方法int

javaString常用方法I(判斷 Java 檔名是否正確,判斷郵箱格式是否正確)

內容摘自慕課網 具體程式碼: public class HelloWorld { public static void main(String[] args) { // Java檔名 String fileName

JavaClass詳解用法以及泛化

在前面我們將類的載入的時候,類載入一共有5步,載入,驗證,準備,解析和初始化。其中載入階段,除了將位元組碼載入到方法區,還生成了這個了的Java.lang.Class物件。那麼這個Class物件到底有什麼用呢? 前面的關於反射的文章,我們多次都用到了Class類,可以用這個

java面向對象學習之——java修飾符成員變量修飾符方法修飾符

16px 實例化 同時 pan 相同 nbsp 激活 fin ati 類修飾符: public(訪問控制符)——>將一個類聲明為公共類,他可以被任何對象訪問,一個程序的主類必須是公共類。abstract——>將一個類聲明為抽象類,沒有實現的方法,需要子類提供方法

Java變量實例變量方法實例方法區別

方法 入口地址 內存 show 實例方法 static oid 共享 程序 類變量:形如static int a; 顧名思義,類變量可以理解為類的變量,類變量在類加載的時候就已經給它分配了內存空間,不同於實例變量(int a; ),實例變量是在該類創建對象的時候分配內存的。

JavaString常見方法以及之間的轉換

String類中的方法描述 public String() 空引數構造方法 public String(byte[] bytes) 把位元組陣列轉換成字串物件 public String(byte[] bytes,int index,int length) 把位元組陣

javaStringStringBufferStringBuilder區別(未完待續)

);}     public CharSequence subSequence(int beginIndex, int endIndex) {         return this.substring(beginIndex, endIndex);     }     /**      * 字串拼接    

JAVAString的split方法的易錯點

最近在專案中遇到了一個問題,就是解析字串成陣列進行比對的,比如:        {            "imageDetail": "123&234&&",            "imageType": "O&A&B&C"

javaString的hashCode方法實現

public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value;

Java StringStringBuilderStringBuffer 區別與如何選擇

1. 概述:         1.1 String                   字串常量,但是它具有不可變性,就是一旦建立,對它進行的任何修改操作都會建立一個新的字串物件。         1.2 StringBuffer              

JavaString的忽略大小寫比較器(CaseInsensitiveComparator)的compare方法的一點疑問

最近我在看jdk原始碼,無意中看到String類的忽略大小寫比較器的原始碼,其原始碼如下。 private static class CaseInsensitiveComparator implements Comparator<Str

幾個javaString最常用的方法

常見的String方法   String和char陣列的裝換,char c[]=str.toCharArray();   String str = new String(c);   取出String字串物件中的某個字元:str.charAt(3);   String和byte陣列的轉換:byte b[] =

JavaString的構造方法

String類有以下幾種用得到的構造方法: 1. 空構造 空構造生成一個空的字串:函式宣告:public String (); 使用: String s1 = new String(); 構造了一個空的字串s1 2.把位元組陣列轉換成字串 函式原型: public Str

JavaString的一些方法的返回值的結果

</pre><pre name="code" class="java">public class smp42 { public static void main(String args[]) { String str1 = "I am a

javaString型轉換為yyyy-MM-dd的Date

col code edate birt mat led div get sys String birthday ="2017-02-22"; SimpleDateFormat sdf = new SimpleDateFormat(("yyyy-MM-dd")); jav

javaString為什麽要設計成final?

tro cli lai 這一 引用 沒有 num 重新 static 大神鏈接:在java中String類為什麽要設計成final? - 程序員 - 知乎 我進行了重新排版,並且更換了其中的一個例子,讓我們更好理解。 String很多實用的特性,比如說“不可變性”,是工

javaString的常用方法

大寫 緩沖 let 常用方法 類型 http 全部 new 出現 轉自http://www.cnblogs.com/crazyac/articles/2012791.html java中String的常用方法1、length() 字符串的長度  例:char chars[]

Java繼承機制接口

string類型 賦值 In void ati ble public 3.1 eache 1)聲明一個Person類,有name(String類型)、age(int類型)、sex(char類型)屬性,通過構造方法進行賦值。一個show方法,返回String類型,內容如下: