javaanull在前和在後的區別

2021-03-04 00:15:27 字數 6819 閱讀 3528

1樓:東方憐人

功能上是沒有區別的,企業裡大多是時候是推薦第二種的,是因為能夠防止程式設計師書寫遺漏等號導致錯誤。比如:null !

= a 這樣少了「!」也會報錯。而a !

=null少了"!"就不會報錯了。程式設計師有時候容易把 == 誤寫為 = ,如果把常量放前面 5 = i ,會編譯錯誤,而寫成i=5就不會報錯了,所以這樣寫能發現這種筆誤bug。

希望採納啊

2樓:等待iii希望

從意義上將沒有區別,從程式設計規範上講,第一種寫法是為了防止寫成:null = a

3樓:匿名使用者

推薦第二種,第一種容易報空指標的錯誤

4樓:海藍_愛埋

沒區別吧。主要是如果常量在前面的話你萬一少打乙個=或者什麼會立刻發現。

java中equals和==有什麼區別,判斷變數是否為空時null放在前和放在後有什麼區別

5樓:無血

equals 只是比較值是否相同

而==則是比較兩個

變數 是不是同乙個變數,也應內時是說

要看看這兩個容變數是不是引用的同乙個位址,java 中只有引用位址相同的兩個變數才被視為==如果明白值傳遞與位址傳遞的話,這個問題應該不難理解null放在前面就是為了避免變數為空時 引了空指標異常如: if(a==null) 如果a 真為空時,現在就相當用呼叫了變數a的方法,a 都為空了還呼叫他的方法,當然會引發空指標異常了,但寫成if(null==a)就不會了

6樓:匿名使用者

乙個比較字串,乙個比較位址,

這個一般的書上應該講的很詳細的。

那2個if語句就不是同乙個意思,你仔細理解一下。

7樓:匿名使用者

如果是數字比較就沒有區別,如果是字元就要用equal了.字元比較不能用==.

null放前放後沒有區別!

建議你自己寫個小程式試下,印象更深些!

8樓:匿名使用者

==是比較物件bai是不是相當du 也就是說它們是不是zhi指向同乙個引用dao equals的預設方專法是說明兩個對屬象的指向是不是相同的 但是好多類都過載了這個方法 比如說字串類 用於比較兩個字串物件的字面值是不是相等.

java中為什麼字串的比較常量放前面好? 例如 "a".equals(str); null !=str;

9樓:匿名使用者

"a".equals(str); null !bai=str;

前乙個表達應該這樣最好du,後乙個則沒有必zhi要吧。dao這裡主要考慮內str變數容

的情況,當引用乙個變數(物件時),可能這個變數指向了乙個空指標,就是沒有指向具體的物件,

如果這樣呼叫str.equals("a"),當str==null時就會出現異常。

10樓:匿名使用者

("").equals(str)在str為null的時候返回false,

str.equals("")在str為null時會拋空指標異常.

七里河團隊答疑助人,希望我的回答對你有所幫助

11樓:匿名使用者

有兩種情況:

當("a").equals(str)時,

如果str為null的時候返回false;

當str.equals("a")時,如果str為null時會拋nullpointerexception空指標異常;

所有我們一般內都將常量放前容面。

java中null與""的區別是什麼?

12樓:匿名使用者

比如宣告乙個 string str ;

如果說str是null,那麼記憶體根本沒建立字串對像,專並由str引用。

如果說str是空串,那麼確屬實存在乙個由str引用的字串對像,只不過這個字串的值是""

null用來表示乙個引用沒有例項存在,而""本身是乙個例項,有自己的物件空間,和"zzyyxx"這樣的string沒什麼區別。兩個都是有值 !!!

null == a 和 a == null 的區別,該怎麼處理

13樓:匿名使用者

假如你少寫了個等號,寫成a = null是不會報錯的,但是null = a,會報錯,所以習慣寫null == a更好

14樓:匿名使用者

兩者是一樣的,誰先誰後都沒關係,有些只是因為習慣問題,比如說從c++轉過來的。你看下這段**:

string a = null;

if (a == null)  else

if (null == a)  else

執行結果如下:

這就說明兩種寫法都沒錯。

15樓:佬濕機

null==a是指null 的值等於a,a==null是指a的值等於null,具體一點就前者是指null的值是等於a,後者是指a的值是等於空,前者null的值不為空,後者a的值是等於空

java的string=a; a==null和a.equals(null)這兩個判斷有什麼區別

16樓:大漠小北

首先明確的一點,string的equals方法預設是重寫了object類的方法,具體是實現是

public boolean equals(object paramobject)

if (paramobject instanceof string)

return true;}}

return false;

}也就是說,對於a.equals(null)來說,第一步也會判斷this == null,這裡的this就是a。上面的**已經說明,當equals傳入的引數是null的時候,和a==null的效果是一樣的。

但是如果傳入的引數不是null,那麼a==b只能判斷a和b是否指向同乙個java物件,而a.equals(b)能判斷a和b指向的java物件的字串內容是否一樣。

17樓:匿名使用者

a==null;這個裡面的a 是string物件的引用,(就相當於c++的指標),a==null 是判斷這個引用a是不是指向乙個string物件。

a.equal(null) 這個是判斷a這個引用所指向的string物件的內容是不是為空。a只是string物件的引用而已。

18樓:怕就鑽床底

a==null,判斷引用變數a是否是空引用;a.equals(null)判斷字串a內容是否是空

java中null和'的區別

19樓:匿名使用者

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

}編譯並執行上面的**,將列印null。

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

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

由此得出結論:

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

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

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

還有一點要說明的是:

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

提示語在前和在後或沒有的作用和用法怎麼做

1 提示語在前面,說 的後面打冒號。如 媽媽好奇地問 這是誰送的禮物呀?這麼精緻。我傷心極了,對著小狗的屍體大聲喊 美美,你醒醒,你醒醒!2 提示語在中間,說 的後面打逗號。比如 是你嗎?爸爸在 那頭焦急地說,紅紅,快回來吧,我們找你一天了。孩子,別難過。老師撫摸著我的頭,關切地說,以後,我就是你的...

人物對話提示語在前的句子,提示語在前 在後 在中間的句子

一 提示語在前面 1.他頑皮的眨了眨眼,說 哈哈 我就知道會這樣.2.待了一會兒,父親才回答 不要了就燒掉.你小孩子家知道什麼?3.挑山工說 我們 有近道?還不是和你們一條道?4.我怕父親說出哥哥來,就這樣搶著說 是的,我是最大的.二 提示語在中間 1.什麼?她說,你是說今天要就要出差了?為什麼我事...

提示語在前 在後 在中間的句子,用提示語在前,在後,在中間,寫一段話

一 提示語在前面 1 他頑皮的眨了眨眼,說 哈哈!我就知道會這樣。2 待了一會兒,父親才回答 不要了就燒掉。你小孩子家知道什麼?3 挑山工說 我們 有近道?還不是和你們一條道?4 我怕父親說出哥哥來,就這樣搶著說 是的,我是最大的。二 提示語在中間 1 什麼?她說,你是說今天要就要出差了?為什麼我事...