導航:首頁 > 編程語言 > javanull和的區別

javanull和的區別

發布時間:2022-08-23 13:39:40

java null 和空的區別

一般情況下 . java中的null就是指的空 .

但是稍微注意的是 空字元串"" 和null是有區別的

"" 代表有字元串, 但是字元串內容為空, 長度為0

null表示對象為空

如果用為null的對象去調用方法, 就會出現空指針異常

所以 在字元串進行內容比較時 ,要 使用不為空的字元串 去調用比較方法,

參考代碼如下

publicclassTest{
publicstaticvoidmain(String[]args){
Stringstr1=null;
Stringstr2="";
System.out.println(str1==str2);//false
System.out.println(str2.equals(str1));//false
System.out.println(str1.equals(str2));//空指針異常java.lang.NullPointerException

}
}

② java中和null的區別

兩者的區別與 「數字0和沒有不是同一種概念」是一個道理。
null是空對象,""是空字元串
null可以賦值給任何對象,而""就不行了,只能賦值給字元串對象
如:
String s=null;//定義了一個對象實例s,但未將該實例指向任何內存空間
String s="";//定義了一個對象實例s,指向了一個空串

③ java中null與""的區別

兩者都是賦值,null代表給對象賦予了一個空值,凡是用null值對象調用方法都會拋出nullpointerexception異常,「」代表給對象賦給了一個長度為0的字元串,剛學java在這里是會有點迷糊,在判斷時也是有區別的 s ==null和s.equals(""); 你可以這樣理解下,但只是參考並不是同理。
String s =null 空值; String s ="" 長度為0的字元串 String s ="a";長度為1的字元串

Integer i = null; Integer i = 0; Integer i = 1;

④ java中null和'的區別

null和""的區別

問題一:

null和""的區別

String s=null;

string.trim()就會拋出為空的exception

String s="";

string.trim()就不會拋,為什麼?

答:

NULL代表聲明了一個空對象,根本就不是一個字元串。

""代表聲明了一個對象實例,這個對象實例的值是一個長度為0的空字元串。

NULL代表聲明了一個空對象,對空對象做任何操作都不行的,除了=和==

""是一個字元串了,只是這個字元串裡面沒有內容了

String s=null;只是定義了一個句柄,也就是說你有了個引用,但是這個引用未指向任何內存空間

String s="";這個引用已經指向了一塊是空字元串的內存空間,是一個實際的東東了,所以你可以對它操作,而不用擔心什麼了

你說數字0和沒有是不是一種概念啊??道理一樣的

而且,null可以賦值給任何對象.""就不行了.

這里""和NULL絕對是兩個概念

""代表一個字元串存在,它的值就是「」

NULL代表字元串根本沒有實際的值,你並不知道它是什麼。。。

哦,我明白了,意思就是String string = null 跟String string;是一回事兒

null是空對象 ""是空字元串

String s=null;//null是未分配堆內存空間

String a;//分配了一個內存空間,沒存入任何對象

String a="";//分配了一個內存空間,存了一個字元串對象

問題二:

String s;和String s=null;和String s="a";有什麼區別?

針對這三種情況,使用out.println(s);的時候,第一個會出現異常,第二個會輸出null.第三個則會輸出a.

這是為什麼呢?這三句聲明語句,各自作了什麼呢?

答:

第一個只是定義了一個String類型變數s,並沒有給它賦初值,在Java中,默認在使用一個變數的時候必須賦予它初值(降低風險)。

第二個和第三個都定義了String類型變數s,並賦予它初值,只不過第二個賦予的值為null(空)罷了

主要要理解的是String s; s為一個引用~~它不是對象

第一個是沒有初始化的引用;

第二個為空引用;

第三個是在字元串池裡寫入一個字元'a',然後用s指向它。

另外,

String s="a"和String s=new String("a");是有本質上的區別的

前者是在字元串池裡寫入一個字元'a',然後用s指向它;

後者是在堆上創建一個內容為"a"的字元串對象。

String str="aaa"; //於棧上分配內存

String str=new String("aaa"); //於堆上分配內存

String s; 系統會自動賦值null

String s;只是給s分配一個內存空間

String s=null;是分配的空間中存儲的值為空值

String s="a";這句就不用我多說了分配的空間的值為字元a

問題三:

聲明了一個string a;變數

在以後的判斷中,a==""和a==null有何不同?

答:

如果沒有給a賦過值,a==""會導致異常。

在實際處理時,往往認為""和null代表相同的含義,即都代表無值。

此時建議用如下語法:

if(a==null || a=="")

{

}

如果a為null,就不會執行後面的判斷,直接返回true。

null是用來判斷引用類型是否分配了存儲空間

""是針對字元串的;

string類型實際上是字元串指針,也即是一個引用類型

所以如果沒有給a賦過值,a==""會導致異常

所以if(a==null || a==""){}這種寫法也是正確的

問題四:

String abc=null;String abc="";String abc;三種寫法有什麼區別?

答:

1:創建一個空字元串對象,

2:創建一個字元串為空的字元串對象。

3:聲明一個字元串對象,但並沒有分配內存,而1,2已經分配了內存

對於最後一種表示,你不能if(abc==null),或者int length = abc.length();編譯的時候會提示可能沒有初始化.

String abc=null;

String abc="";

一般推薦使用第二種

第一種abc指向null,很多時候要判斷字元串是否為空時,容易漏掉這種情況,在調用String的相關方法的時候就會出錯

第二種則相對簡單,String的方法都可以用,判斷的時候也不會出錯

1) String abc=null;

2) String abc;

3)String a="";

4) String b="";

5) String c=new String("");

6) String d=new String("");

//1)等於2),和C語言不同,JAVA為安全原因不允許一個懸掛引用,沒有賦值的引用地址一律自動賦值為NULL,以防止訪問到任意內存

//3)和4)中,變數a和b將會指向同一內存地址(""的地址)

//5)和6)中,變數c和d不會指向同一地址,而是兩個""內容的地址,並且和a,b不同,實際上,3)和4)相當於new String("").intern().

//String類維護著一個字元串池,對於像3)和4)這樣的賦值方法,String會在這個池中查找字元串是否已經在池中,如果在,就直接指向該地址,

如果不在,生成一個實例放入池中再指向那個地址,可見對於同樣內容的字元串多次引用時3)4)的方法要比5)6)的方法剩內存,之所以這樣做,是

因為String是一個內容不可變的量,運用的是設計模式GOF.FlyWeight

但有個關鍵的一點,沒有人說到,這就是:

String s;在什麼情況下可以等同於String s=null;而在什麼情況下又不等同?!

考慮下面的代碼:

//StringTest.java

public class StringTest {

static String s; //*

public static void main(String[] args) {

//String s; //**

System.out.println(s);

}

}

編譯並運行上面的代碼,將列印null。

可見標有*號的行是自動初始化了的(s被自動初始化為null)。

而如果把標有**號的行取消注釋,代碼將不能通過編譯,這是因為這行定義的是本地變數,而本地變數是不會自動初始化的。

由此得出結論:

在成員變數的定義中,String s;等同於String s=null;

而在本地變數(方法變數)的定義中,String s;不等同於String s=null;,這時要使用s必須顯式地賦值。

這些雖然是小知識點,但在實際應用中很重要,也很容易被一些人忽視,特此提出。

還有一點要說明的是:

只要是在方法在中定義變數都要顯示賦初值,main()方法也不例外,而在方法之外編譯器回自動賦初值。

⑤ java中的null跟null有區別嗎

在代碼中:
1 //name可以為"",即:name == ""
2 //但是name不可以為null,即:name != null

下面是java中的null和""區別:

1 null和""的區別
2 問題一:
3 null和""的區別
4 String s=null;
5 string.trim()就會拋出為空的exception
6 String s="";
7 string.trim()就不會拋,為什麼?
8 答:
9 NULL代表聲明了一個空對象,根本就不是一個字元串。
10 ""代表聲明了一個對象實例,這個對象實例的值是一個長度為0的空字元串。
11
12 NULL代表聲明了一個空對象,對空對象做任何操作都不行的,除了=和==
13 ""是一個字元串了,只是這個字元串裡面沒有內容了
14
15 String s=null;只是定義了一個句柄,也就是說你有了個引用,但是這個引用未指向任何內存空間
16 String s="";這個引用已經指向了一塊是空字元串的內存空間,是一個實際的東東了,所以你可以對它操作,而不用擔心什麼了
17
18 你說數字0和沒有是不是一種概念啊??道理一樣的
19
20 而且,null可以賦值給任何對象.""就不行了.
21
22 這里""和NULL絕對是兩個概念
23 ""代表一個字元串存在,它的值就是「」
24 NULL代表字元串根本沒有實際的值,你並不知道它是什麼。。。
25
26 哦,我明白了,意思就是String string = null 跟String string;是一回事兒
27
28 null是空對象 ""是空字元串
29 String s=null;//null是未分配堆內存空間
30 String a;//分配了一個內存空間,沒存入任何對象
31 String a="";//分配了一個內存空間,存了一個字元串對象
32
33
34
35 問題二:
36 String s;和String s=null;和String s="a";有什麼區別?
37 針對這三種情況,使用out.println(s);的時候,第一個會出現異常,第二個會輸出null.第三個則會輸出a.
38 這是為什麼呢?這三句聲明語句,各自作了什麼呢?
39
40 答:
41 第一個只是定義了一個String類型變數s,並沒有給它賦初值,在Java中,默認在使用一個變數的時候必須賦予它初值(降低風險)。
42 第二個和第三個都定義了String類型變數s,並賦予它初值,只不過第二個賦予的值為null(空)罷了
43
44 主要要理解的是String s; s為一個引用~~它不是對象
45 第一個是沒有初始化的引用;
46 第二個為空引用;
47 第三個是在字元串池裡寫入一個字元'a',然後用s指向它。
48 另外,
49 String s="a"和String s=new String("a");是有本質上的區別的
50 前者是在字元串池裡寫入一個字元'a',然後用s指向它;
51 後者是在堆上創建一個內容為"a"的字元串對象。
52 String str="aaa"; //於棧上分配內存
53 String str=new String("aaa"); //於堆上分配內存
54
55 String s; 系統會自動賦值null
56
57 String s;只是給s分配一個內存空間
58 String s=null;是分配的空間中存儲的值為空值
59 String s="a";這句就不用我多說了分配的空間的值為字元a
60
61
62
63 問題三:
64 聲明了一個string a;變數
65 在以後的判斷中,a==""和a==null有何不同?
66
67 答:
68 如果沒有給a賦過值,a==""會導致異常。
69 在實際處理時,往往認為""和null代表相同的含義,即都代表無值。
70 此時建議用如下語法:
71 if(a==null || a=="")
72 {
73 }
74 如果a為null,就不會執行後面的判斷,直接返回true。
75
76 null是用來判斷引用類型是否分配了存儲空間
77 ""是針對字元串的;
78 string類型實際上是字元串指針,也即是一個引用類型
79 所以如果沒有給a賦過值,a==""會導致異常
80 所以if(a==null || a==""){}這種寫法也是正確的
81
82
83 問題四:
84 String abc=null;String abc="";String abc;三種寫法有什麼區別?
85
86 答:
87 1:創建一個空字元串對象,
88 2:創建一個字元串為空的字元串對象。
89 3:聲明一個字元串對象,但並沒有分配內存,而1,2已經分配了內存
90 對於最後一種表示,你不能if(abc==null),或者int length = abc.length();編譯的時候會提示可能沒有初始化.
91
92
93 String abc=null;
94 String abc="";
95 一般推薦使用第二種
96 第一種abc指向null,很多時候要判斷字元串是否為空時,容易漏掉這種情況,在調用String的相關方法的時候就會出錯
97 第二種則相對簡單,String的方法都可以用,判斷的時候也不會出錯
98
99 1) String abc=null;
100 2) String abc;
101 3)String a="";
102 4) String b="";
103 5) String c=new String("");
104 6) String d=new String("");
105 //1)等於2),和C語言不同,JAVA為安全原因不允許一個懸掛引用,沒有賦值的引用地址一律自動賦值為NULL,以防止訪問到任意內存
106 //3)和4)中,變數a和b將會指向同一內存地址(""的地址)
107 //5)和6)中,變數c和d不會指向同一地址,而是兩個""內容的地址,並且和a,b不同,實際上,3)和4)相當於new String("").intern().
108 //String類維護著一個字元串池,對於像3)和4)這樣的賦值方法,String會在這個池中查找字元串是否已經在池中,如果在,就直接指向該地址,
109
110 如果不在,生成一個實例放入池中再指向那個地址,可見對於同樣內容的字元串多次引用時3)4)的方法要比5)6)的方法剩內存,之所以這樣做,是
111
112 因為String是一個內容不可變的量,運用的是設計模式GOF.FlyWeight
113
114
115
116
117 但有個關鍵的一點,沒有人說到,這就是:
118 String s;在什麼情況下可以等同於String s=null;而在什麼情況下又不等同?!
119 考慮下面的代碼:
120 //StringTest.java
121 public class StringTest {
122 static String s; //*
123 public static void main(String[] args) {
124 //String s; //**
125 System.out.println(s);
126 }
127 }
128 編譯並運行上面的代碼,將列印null。
129 可見標有*號的行是自動初始化了的(s被自動初始化為null)。
130 而如果把標有**號的行取消注釋,代碼將不能通過編譯,這是因為這行定義的是本地變數,而本地變數是不會自動初始化的。
131 由此得出結論:
132 在成員變數的定義中,String s;等同於String s=null;
133 而在本地變數(方法變數)的定義中,String s;不等同於String s=null;,這時要使用s必須顯式地賦值。
134 這些雖然是小知識點,但在實際應用中很重要,也很容易被一些人忽視,特此提出。
135 還有一點要說明的是:
136 只要是在方法在中定義變數都要顯示賦初值,main()方法也不例外,而在方法之外編譯器回自動賦初值。
137
138

⑥ java null 和 "null"有區別嗎

你加上雙引號就是一個字元串了,null本身代表空,這兩個當然不一樣了。

Stringstr1=null;//代表str1為空
Stirngstr2="null";//代表str2為一個字元串,內容是"null"
閱讀全文

與javanull和的區別相關的資料

熱點內容
如何共享伺服器的網路連接 瀏覽:130
程序員簡易表白代碼 瀏覽:163
什麼是無線加密狗 瀏覽:60
國家反詐中心app為什麼會彈出 瀏覽:64
cad壓縮圖列印 瀏覽:100
網頁打開速度與伺服器有什麼關系 瀏覽:860
android開發技術文檔 瀏覽:62
32單片機寫程序 瀏覽:43
三星雙清無命令 瀏覽:835
漢壽小程序源碼 瀏覽:340
易助erp雲伺服器 瀏覽:530
修改本地賬戶管理員文件夾 瀏覽:416
python爬蟲工程師招聘 瀏覽:283
小鵬p7聽音樂哪個app好 瀏覽:354
linux下的防火牆 瀏覽:954
凌達壓縮機美芝壓縮機 瀏覽:350
php後面代碼不執行 瀏覽:236
微我手機怎樣設置應用加密 瀏覽:203
條件加密 瀏覽:630
androidstudio設置中文 瀏覽:643