當前位置:首頁 » 編程語言 » javanull

javanull

發布時間: 2022-01-15 08:01:03

A. java ==和 !=null

布爾表達式 :
變數 == null 如果變數為空,結果為true

變數 != null 如果變數為空,結果為false

B. java中的 null+null

import java.util.Scanner;

public class asdf {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String a=null;
String b=null;
String c=a+b;
if(c.equals("nullnull")){
System.out.println("aaa");
}
}
}
這段代碼結果會輸出aaa
在String c=a+b的時候a與b都被理解為"null"而不是空了
如果你寫成
String a=null;
String b=a+"";
那麼a將被當作空b將被當作字元串"null"

C. java null 和 "null"有區別嗎

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

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

D. java中的 null+null

如果你是想問這個空加上空,代碼如下:

publicclassNullTest{

publicstaticvoidmain(String[]args){Stringstr1=null;Stringstr2=null;Stringstr3=str1+str2;System.out.println(str3);}

}

其中:Stringstr1=null;

Stringstr2=null;
Stringstr3=str1+str2;
等價於:
Stringstr3=newStringBuilder().append((String)null).append((String)null).toString();

append(String)的源碼

(Stringstr){if(str==null)str="null";intlen=str.length();ensureCapacityInternal(count+len);str.getChars(0,len,value,count);count+=len;returnthis;}

E. 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()方法也不例外,而在方法之外編譯器回自動賦初值。

F. java 運行顯示null ,為什麼

構造方法是和類名一樣並且沒有返回值的,你寫的這個有void聲明 是普通方法,把void去掉就可以了,一般加上public

G. 關於java的null

首先java對象的產生是分兩步的:
1.在棧區聲明對象 如A a,這時聲明的內容相當於一個指針(我們姑且認為它是一個指針,也可以理解為引用),當a=null時表明這是一個沒有指向任何對象.
2.實例化a,操作如下a=new A()這是在堆區為a分配了空間.

也就是由棧區的a指向堆區的new A()對象.

而a=null則是表明,首先,a是必然在棧區的,a的值是一個地址(假設它真的是一個指針),a=null表示的是a的值是null,與堆區無關

此時的a與堆並無關系,何況java中有一種申請垃圾回收的手段便是將一個對象賦值為null以切斷與之前關聯對象的關系,因此答案應該是2.

H. java中null 代表著什麼意思的關鍵字

一、null是代表不確定的對象

Java中,null是一個關鍵字,用來標識一個不確定的對象。因此可以將null賦給引用類型變數,但不可以將null賦給基本類型變數。

比如:int a = null;是錯誤的。Ojbect o = null是正確的。

Java中,變數的適用都遵循一個原則,先定義,並且初始化後,才可以使用。我們不能int a後,不給a指定值,就去列印a的值。這條對對於引用類型變數也是適用的。

有時候,我們定義一個引用類型變數,在剛開始的時候,無法給出一個確定的值,但是不指定值,程序可能會在try語句塊中初始化值。這時候,我們下面使用變數的時候就會報錯。這時候,可以先給變數指定一個null值,問題就解決了。例如:

Connection conn = null;
try {
conn = DriverManager.getConnection("url", "user", "password");
} catch (SQLException e) {
e.printStackTrace();
}

String catalog = conn.getCatalog();

如果剛開始的時候不指定conn = null,則最後一句就會報錯。

二、null本身不是對象,也不是Objcet的實例

null本身雖然能代表一個不確定的對象,但就null本身來說,它不是對象,也不知道什麼類型,也不是java.lang.Object的實例。
可以做一個簡單的例子:

//null是對象嗎? 屬於Object類型嗎?
if (null instanceof java.lang.Object) {
System.out.println("null屬於java.lang.Object類型");
} else {
System.out.println("null不屬於java.lang.Object類型");
}

結果會輸出:null不屬於java.lang.Object類型

三、Java默認給變數賦值

在定義變數的時候,如果定義後沒有給變數賦值,則Java在運行時會自動給變數賦值。賦值原則是整數類型int、byte、short、long的自動賦值為0,帶小數點的float、double自動賦值為0.0,boolean的自動賦值為false,其他各供引用類型變數自動賦值為null。
這個具體可以通過調試來看。

四、容器類型與null

List:允許重復元素,可以加入任意多個null。
Set:不允許重復元素,最多可以加入一個null。
Map:Map的key最多可以加入一個null,value欄位沒有限制。
數組:基本類型數組,定義後,如果不給定初始值,則java運行時會自動給定值。引用類型數組,不給定初始值,則所有的元素值為null。

五、null的其他作用

1、判斷一個引用類型數據是否null。 用==來判斷。
2、釋放內存,讓一個非null的引用類型變數指向null。這樣這個對象就不再被任何對象應用了。等待JVM垃圾回收機制去回收。

I. JAVA中,null,是什麼意思

null意思是空,指什麼都沒有,聲明一個對象為空,就是告訴JAVA虛擬機要給該對象分配內存地址,此時就可以拿來用了。例如:
String str = null;
是聲明了一個String類型的對象,但是該對象是沒有具體的值,只是在內存中存在一個str對象。

熱點內容
櫻花伺服器測試ip 發布:2024-09-20 20:10:39 瀏覽:279
爐石傳說安卓怎麼玩 發布:2024-09-20 20:09:59 瀏覽:312
ios開會員為什麼比安卓貴 發布:2024-09-20 20:09:55 瀏覽:568
緩存伺服器redis 發布:2024-09-20 20:09:01 瀏覽:75
優酷上傳ts 發布:2024-09-20 19:55:58 瀏覽:273
minecraft怎麼開伺服器地址 發布:2024-09-20 19:52:14 瀏覽:651
android彈出布局 發布:2024-09-20 19:14:29 瀏覽:981
預演算法包括 發布:2024-09-20 18:52:07 瀏覽:764
什麼數字後面跟著密碼 發布:2024-09-20 18:52:07 瀏覽:878
訂座源碼 發布:2024-09-20 18:52:06 瀏覽:383