java中null
Ⅰ java中,null,是什麼意思
null意思是空,指什麼都沒有,聲明一個對象為空,就是告訴JAVA虛擬機要給該對象分配內存地址,此時就可以拿來用了。例如:
String str = null;
是聲明了一個String類型的對象,但是該對象是沒有具體的值,只是在內存中存在一個str對象。
Ⅱ java中null 代表著什麼意思的關鍵字
一、null是代表不確定的對象x0dx0a x0dx0aJava中,null是一個關鍵字,用來標識一個不確定的對象。因此可以將null賦給引用類型變數,但不可以將null賦給基本類型變數。x0dx0a x0dx0a比如:int a = null;是錯誤的。Ojbect o = null是正確的。x0dx0a x0dx0aJava中,變數的適用都遵循一個原則,先定義,並且初始化後,才可以使用。我們不能int a後,不給a指定值,就去列印a的值。這條對對於引用類型變數也是適用的。x0dx0a x0dx0a有時候,我們定義一個引用類型變數,在剛開始的時候,無法給出一個確定的值,但是不指定值,程序可能會在try語句塊中初始化值。這時候,我們下面使用變數的時候就會報錯。這時候,可以先給變數指定一個null值,問題就解決了。例如:x0dx0a x0dx0a Connection conn = null;x0dx0a try {x0dx0a conn = DriverManager.getConnection("url", "user", "password");x0dx0a } catch (SQLException e) {x0dx0a e.printStackTrace();x0dx0a }x0dx0a x0dx0a String catalog = conn.getCatalog();x0dx0a x0dx0a如果剛開始的時候不指定conn = null,則最後一句就會報錯。x0dx0a x0dx0a二、null本身不是對象,也不是Objcet的實例x0dx0a x0dx0anull本身雖然能代表一個不確定的對象,但就null本身來說,它不物衫是對象,也不知道什麼類型,也不是java.lang.Object的實例。x0dx0a可以做一個簡單的例子:x0dx0a x0dx0a //null是對象嗎? 屬於Object類型嗎?x0dx0a if (null instanceof java.lang.Object) {x0dx0a System.out.println("null屬於java.lang.Object類型");x0dx0a } else {x0dx0a System.out.println("null不屬於java.lang.Object類型");x0dx0a }x0dx0a x0dx0a結果會輸出:null不屬於java.lang.Object類型x0dx0a x0dx0a三、Java默認給變數賦值x0dx0a x0dx0a在定義變數的時候,如果定義後沒有給變數賦值,則Java在運行時會自動給變數賦值。賦值原則是整數類型int、byte、short、long的自動賦值為0,帶小數點的float、double自動賦值為0.0,罩陸腔boolean的自動賦值為false,其他各供引用類型變數自動賦值為null。x0dx0a這個具體可以通過調試來看。x0dx0a x0dx0a四、容器類型與nullx0dx0a x0dx0aList:允許重復元素,可以加入任意多個null。x0dx0aSet:不允許重復元素,最多可以加入一個null。x0dx0aMap:Map的key最多可以加入一個null,value欄位沒有限制。x0dx0a數組:基本類型數組,定義後,如果不給定初始值,則java運行時會自動給定值。引用類型數組,不給定初始值,則所有的悉殲元素值為null。x0dx0a x0dx0a五、null的其他作用x0dx0a x0dx0a1、判斷一個引用類型數據是否null。 用==來判斷。x0dx0a2、釋放內存,讓一個非null的引用類型變數指向null。這樣這個對象就不再被任何對象應用了。等待JVM垃圾回收機制去回收。
Ⅲ java中null的意思是什麼
null意思是空,指什麼都沒有,聲明一個對象為空,就是告訴JAVA虛擬機瞎行圓要給該對象分配內存地址磨塌,此時就可以拿來用了。例如:
String str = null;
是聲明了一個String類型的對象,但是該對象是沒有具體的值,只是在內存中存在一帶培個str對象。
Ⅳ java中的空串""和null的區別講解
空串"",的意思是:有個串,這個串有個合法的地址,只是裡面的內容為「」(空)。
null,的意思是:地址就是「空」。在C及其衍生的語言里,包括java,「空」被認為是個非法地址,因此不存在「串」。
希望你能明白了,有問題繼續交流,謝謝
Ⅳ Java中的null如何理解
返回false,因為null不是任何類的實例。null就是空的引用。
List
集合里可以用null作為參數,是因為List默認允許加入空值,所以使用list.add(null)才不會有錯。
但是如果對於不接受空值的集合傳入null做參數就會報空指針異常了,比如HashTable就不接受null作為鍵或值。
對於你的補充:
1
結果是
List
doesn't
contain
null
List
contains
null
List
contains
null
這些你自己測試就可以看到;
2
List
是一個有序的集合,它裡面存儲的每一個元素都是對象,確切來說是對象的引用(就是存放真正對象所在的內存地址);對象的引用指向的是真正的對象,你直接存入null和你定義一個Object對象賦值為null然後再存入都是一樣的,它就代表一個引用位置,而這個位置是空也就是並沒有指向什麼具體的對象,它的值是null,所以你看到的都是null;
3
結果就是上面這樣出來的。
Ⅵ 如何在Java中檢查空值(Null)
目錄部分1:在Java中檢查空值1、使用「=」來定義一個變數。2、使用「==」來檢查變數的值。3、使用「if」語句來創建null的條件。部分2:使用空值檢查1、使用null作為一個未知值。2、用null作為結束過程的條件。3、用null表示未啟動的狀態。空值(null)表示變數沒羨蠢仿有指向任何對象,並且沒有值。可以使兄纖用基本的if語句來檢查代碼中的空值。空值通常用於表示或確認某個對象並不存在,因此可以作為啟動或停止代碼中其他進程的條件。
部分1:在Java中檢查空值
1、使用「=」來定義一個變數。一個「=」用於聲明一個變數並為其賦值。你可以用這個符號把變數設為null。「0」和「null」的值是不同的,所以它們的作用也有所不同。
variableName = null;
2、使用「==」來檢查變數的值。「==」用於檢查兩邊的兩個值是否相等。如果使用「=」將變數設為null,則檢查變數是否等於null將返回真值(True)。variableName == null;
你也可以用「!=」確認兩個值不相等。
3、使用「if」語句檔辯來創建null的條件。這樣的表達式會返回一個布爾值(真或假)。你可以用布爾值作為接下來語句的條件。例如,如果值為空,則顯示文本「object is null」。如果「==」未確認變數為null,則它將跳過該條件,或可以從其他路徑繞過。
Object object = null ;if ( object == null ) {System.out.print ( "object is null ");}
部分2:使用空值檢查
1、使用null作為一個未知值。用null代替任何指定的值是很常見的做法。string() 表示值是null,直到實際使用為止。
2、用null作為結束過程的條件。返回空值可以被用於觸發結束循環或中斷進程。當出現問題或預料外的情況時,通常用這種方法觸發錯誤或例外信息。
3、用null表示未啟動的狀態。null也可以用來表示進程還沒開始,或者進程准備開始的條件。例如:在對象為null時執行某件事,或者在對象不為null之前什麼都不做。
synchronized method(){while (method()==null); method().nowCanDoStuff();}小提示一些人不提倡在面向對象編程中大量使用null的做法,因為在這種編程中,值應該總是指向對象。
Ⅶ 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程序運行中newdate為null
在Java程序中,如果使用`new Date()`創建一個新的日期對象時返回了null,可能是以下原因之一:
1. 內存不足:如果系統內存不足,則無法為新對象分配空間。這種情況下可以嘗試釋放一些內存或增加系統內存。
2. 代碼錯誤:檢查代碼是否有語法錯誤、邏輯錯誤或脊手伏其他問題導致程序出現異常。建議使用try-catch塊來捕獲異常並進行處理。
3. 系統時間設置錯誤:如果系統時間設置不正確,則可能會導致Date對象返回null。請確保您的計算機上的時鍾和時區設置正確,並與網路薯碰同步。
4. Java版本問題:某些舊版Java虛擬機(JVM)可能存在bug,導致Date對象返回null。建議升級到最新版本的JVM並重新運行程序。
總之,在遇到`new Date()`返回null的情況下,需要仔細排查以上幾個方面,並根據具體情櫻攜況採取相應措施解決問題。
Ⅸ java 字元串為null 如何判斷
定義 String str;
判斷字元串是否空涉及兩個層次:
1、是首先判斷字元串變數的引用是否為空,即空對象的概念,用null來判斷,可以用if(str==null) 判斷 str是否為空;(注意不能用equals(null),在參數為null情況下,返回值永遠是false);
2、是在不為空對象的情況下,在判斷字元串對象是否為空串,即長度為0.用length()==0。 關鍵是搞清楚字元串對象唯跡為空和空字元串有區別。
拓展內容
Java空字元串與null的區別:
1、類型
null表示的是一個對象的值,而並不是一個字元串友睜。例如聲明一個對象的引用,String a = null ;
""表示的是一個空字元串,也就是說它的長度為0。例如聲明一個字元串String str = "" ;
2、內存分配
String str = null ; 表示聲明一個字元串對象的引用,但指向為null,也就是說還沒有指向任何的內存空間;
String str = ""; 表示聲明一個字元串類型的引用,其值為""空字元串,這個str引用指向的是空字元串的內存空間;
在java中變數和引用變數是存在棧中(stack),而對象(new產生的)都指告並是存放在堆中(heap)。
如下:
String str = new String("abc") ;
Ⅹ 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