空字符串(“”)和null和空格字符串(" ")的區別


1、類型

null表示的是一個對象的值,而並不是一個字符串。
例如聲明一個對象的引用,String a = null ;
""表示的是一個空字符串,也就是說它的長度為0,但它是一個字符串。
例如聲明一個字符串String str = “” ;

2、內存分配
String str = null ; 表示聲明一個字符串對象的引用,但指向為null,也就是說還沒有指向任何的內存空間;
String str = “”; 表示聲明一個字符串類型的引用,其值為""空字符串,這個str引用指向的是空字符串的內存空間;

“” :分配了內存 ,分配了一個空間
null :未分配內存
" " :分配了內存,分配了一個空間

 string str1 = "";    //空字符串      str1.length() 等於 0
 string str2 = null; //NULL
 string str3 = " ";   //空格串          str2.length() 等於 1
  • 1
  • 2
  • 3

在java中變量和引用變量是存在棧中(stack),而對象(new產生的)都是存放在堆中(heap):

 

==============================================================================================

1、表示區別

     string str1 = "";    //空字符串      str1.length() 等於 0

     string str2 = null; //NULL

     string str3 = " ";   //空格串          str2.length() 等於 1

 

2、內存區別

      ""    :分配了內存 ,分配了一個空間

     null  :未分配內存

      " "   :分配了內存

 

3、使用區別

     調用null的字符串的方法會拋出異常。

     ""是一個字符串(String).它在內存中是存在的.它可以使用Object對象中的方法(如"".toString();"".equals()) 。

     null它是一個空對象,在內存中是不存在的。它不可以使用Object對象中的方法。

 

備注:

      空格:本質上和abc一樣,它是一個字符。它的數值(ASCII)是32

      '\0'   :代表字符串的結束,數值(ASCII)是0

 

 

 

在開發的過程對字符的判斷是最正常的事,問題是我們可能很容易對java中的""(空串)和null造成混淆,現加以說明:

比如聲明一個 String str ;
      如果說str是null,那么內存根本沒創建字符串對像,並由str引用。
      如果說str是空串,那么確實存在一個由str引用的字符串對像,只不過這個字符串的值是""
     null用來表示一個引用沒有實例存在,而""本身是一個實例,有自己的對象空間,和"zzyyxx"這樣的String沒什么區別。兩個都是有值 !!!
其次需要注意:
     (1)當oracle 字段里面的值為空時,從oracle讀出來的是字符串"null"(可能是程序讀出來的時,將空對象轉換成為了字符串“null”)。
     (2)還有URL得參數時如:oylin.jsp?id=<%=id%>,當id為空對象是,有可能也將空對象轉換成為了字符串“null”,在寫程序的時候要多加注意。
       另一個問題就是String的null或空值的判斷處理:有以下兩種方法
       f (name != null && !name.equals("")) {
         //do something
         }

        或者

       if (!"".equals(name)) {//將""寫在前頭,這樣,不管name是否為null,都不會出錯。
               //do something
         }

 

 

 


要判讀String是否為空字符串,比較簡單,只要判斷該String的length是否為0就可以,或者直接用方法isEmpty()來判斷。

    但很多時候我們也會把由一些不可見的字符組成的String也當成是空字符串(e.g, space, tab, etc),這時候就不能單用length或isEmpty()來判斷了,因為technically上來說,這個String是非空的。這時候可以用String的方法trim(),去掉前導空白和后導空白,再判斷是否為空。

例:

public class TestEmpty

   {
       public static void main(String[] args){
              String a = "       ";      
              // if (a.isEmpty())
             if (a.trim().isEmpty())
             {
                System.out.println("It is empty");
             }
            else 
            {
               System.out.println("It is not empty");
            }
       }
  }

結果:It is empty

 

 


聲明一個String str

如果說str是null,那么內存根本沒有創建字符串對象,並由str引用。

如果說str是空串,那么確定存在一個由str引用的字符串對象,只不過這個字符串的值是空

null用來表示沒有實例存在,而“”本身就是一個實例,有自己的對象空間,和“123456”這樣的字符串沒有區別。

其次要注意:

           1)當oracle 字段里面的值為空時,從oracle讀出來的是字符串"null"(可能是程序讀出來的時,將空對象轉換成為了字符串“null”)。

     (2)還有URL得參數時如:oylin.jsp?id=<%=id%>,當id為空對象是,有可能也將空對象轉換成為了字符串“null”,在寫程序的時候要多加注意。
另一個問題就是String的null或控制的判斷處理:有以下兩種方法
(name  != null && !name.equals("")){
    dosomething();
}
或者
if(!"".equals(name)){//將“”寫在前面,不管name是否為null,都不會報錯
   dosomething();
}


————————————————
版權聲明:本文為CSDN博主「晨曦s」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sinat_34089391/article/details/80292377


免責聲明!

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



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