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

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

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"不是靜態字符串,是不共享的

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 大学生宿舍飞机 free | a级片在线观看免费 | 免费99精品国产自在现线 | 欧美一区二区三区免费不卡 | 久久久亚洲国产精品主播 | 日韩一级生活片 | 香蕉视频在线观看网址 | 国产v在线播放 | 日本中文字幕一区二区有码在线 | 亚洲电影成人 成人影院 | 免费国产影视观看网站入口 | 欧美图片小说 | 苍井空50分钟无码 | 青草福利视频 | 饭冈加奈子黑人解禁在线播放 | 亚洲精品一区波多野结衣 | 操国产美女 | gav男人天堂 | 齐天大性之七仙女欲春迅雷链接 | 日韩精品一区二区三区中文版 | 电车痴汉中文字幕 | 免费特黄一级欧美大片 | 久久精品无码一区二区日韩av | 99久久精品免费观看区一 | 555www成人网| 欧美香蕉视频 | 四缺一的小说 | 国产精品福利在线观看免费不卡 | 亚洲国产精品久久久久久网站 | 午夜亚洲WWW湿好大 午夜想想爱 | 美女草b | 91欧美国产 | 超h 超重口 高h 污肉1v1 | 欧美日韩国产一区二区三区不卡 | 国产老熟 | 爱情岛论坛亚洲品质自拍视频 | 果冻传媒新在线观看免费 | 久久亚洲电影www电影网 | 99久久精品国产片久人 | 日本在线视频播放 | 91精品大神国产在线播放 |