一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java中String判斷值為null或空及地址是否相等的問題

Java中String判斷值為null或空及地址是否相等的問題

2020-03-24 13:27張釗 JAVA教程

這篇文章主要介紹了Java中String判斷值為null或空及地址是否相等的問題,文中舉了簡單的例子對字符串類型的值和地址問題進行講解,需要的朋友可以參考下

String的null或空值的判斷處理
筆者在開發過程中,常常碰到過下面這些錯誤的用法:
1,錯誤用法一:

?
1
2
3
if (name == "") {
//do something
}

2,錯誤用法二:

?
1
2
3
if (name.equals("")) {
//do something
}


3,錯誤用法三:

?
1
2
3
if (!name.equals("")) {
//do something
}


我們來解說一下:
上述錯誤用法1是初學者最容易犯,也最不容易被發現的錯誤,因為它們的語法本身沒問題,Java編譯器編譯時不報錯。但這種條件可能在運行時導致程序出現bug,永遠也不會為true,也就是時說,if塊里的語句永遠也不會被執行。

上述用法二,用法三 的寫法,是包括很多Java熟手也很容易犯的錯誤,為什么是錯誤的呢?也許你會感到納悶。
對,它們的寫法本身沒錯,但是,少了一個null判斷的條件,試想,如果name=null的情況下,會發生什么后果呢?后果是,你的程序將拋出NullPointerException異常,系統將被掛起,不再提供正常服務。
當然,如果之前已經對name作了null判斷的情況例外。

正確的寫法應該先加上name != null的條件,如例:

?
1
2
3
if (name != null && !name.equals("")) {
//do something
}

或者

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


下面,我們舉一個簡單的例子:

TestNullOrEmpty.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Test {
  public static void main (String args[]){
    String value = null;
    testNullOrEmpty(value);
 
    value = "";
    testNullOrEmpty(value);
 
    value = " ";
    testNullOrEmpty(value);
     
    value = "hello me";
    testNullOrEmpty(value);   
  }
     
  static void testNullOrEmpty(String value){
    if(value == null){
      System.out.println("value is null");
    } else if ("".equals(value)){
      System.out.println("value is blank but not null");
    } else {
      System.out.println("value is \"" + value + "\"");
    }
     
    if (value == "") { //NG 錯誤的寫法
      //別用這種寫法
    }
  }
}

編譯執行:

?
1
2
3
c:\>javac TestNullOrEmpty.java
 
c:\>java TestNullOrEmpty
?
1
2
3
4
value is null.
value is blank but not null.
value is " "
value is "hello me!"


比較String地址相等

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com;
 
public class A
{
 
  /**
   * @param args
   */
  public static void main(String[] args)
  {
 
    String a = "hello";
    String b = "he";
    String c = a.substring(0, 2);
    System.out.println(b.equals(c));//true
    System.out.println(b==c);//false
     
    String d = new String("hello");
    System.out.println(d.equals(a));//true
    System.out.println(d==a);//false
     
    String e = new StringBuilder("hello").toString();
    System.out.println(e.equals(a));//true
    System.out.println(e==a);//false
     
    System.out.println(e.equals(d));//true
    System.out.println(e==d);//false
     
    String f = "hello";
    System.out.println(f.equals(a));//true
    System.out.println(f==a);//true
    System.out.println(f=="hello");//true
    System.out.println(f=="hell"+"o");//true
     
    String g = b+"llo";
    System.out.println(g==f);//false
     
    String h = "he"+"llo";
    System.out.println(h==f);//true
  }
 
}

總結:

1.new出來的String是重新分配內存,字符串不共享,new出來的多個之間也不共享。

2.通過字符串函數操作拼接或者截取到的字符串跟靜態字符串變量也是不共享的。

3.通過加號得到的字符串有兩種情況。

A   "he"+"llo"是靜態字符串,是共享的
B   String a = "He";  a+"llo"不是靜態字符串,是不共享的

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产亚洲精品综合在线网址 | 美女的让男生桶 | 精品久久免费观看 | 精品久久免费视频 | 亚洲AV国产福利精品在现观看 | 国产白白视频在线观看2 | 亚洲国产无线码在线观看 | 91sao国产在线观看 | 韩国男女做性全过程视频 | 亚洲日本va中文字幕 | 色婷综合 | 国产精品一区二区国产 | 九九九精品视频 | 国产精品亚洲综合第一区 | 国产精品久久久久毛片 | 亚洲咪咪 | 久久人妻少妇嫩草AV無碼 | 日韩久久影院 | 国产人人草| 国产大神91一区二区三区 | 国产成人在线综合 | 欧美不卡一区二区三区免 | 亚洲国产情侣偷自在线二页 | 成人国产在线视频在线观看 | 农夫69小说小雨与农村老太 | 色亚 | 袖珍人与大黑人性视频 | 91高清免费国产自产 | 精品破处| 97热在线| 亚洲AV福利天堂一区二区三 | 欧美日韩不卡视频 | 亚洲第99页| 亚洲第一综合网站 | 日本特级a禁片在线播放 | jizz农村野外jizz农民 | 亚洲swag精品自拍一区 | 婚色阿花在线全文免费笔 | 色姑娘色综合 | 免费我看视频在线观看 | 5151hh四虎国产精品 |