国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

延伸 · 閱讀

精彩推薦
787
主站蜘蛛池模板: 免费观看黄色大片 | 99精品国产一区二区三区 | 日本黄色大片免费看 | 日韩av视屏| 日韩精品一区二区在线观看 | 成人国产精品视频 | 日韩中文一区二区三区 | 中文字幕精品一区二区精品 | jizz欧美大片 | 国产精品中文字幕在线观看 | 亚洲高清日本 | 中文字幕在线资源 | 国产成人在线一区 | 国产精品国产三级国产aⅴ中文 | 亚洲精品国偷拍自产在线观看 | 观看av | 国产精品久久久久久久久免费高清 | 久久草在线视频 | 国产九九精品 | 91久久久久久久久久 | 国产精品久久久久久一区 | 日韩精品一区二区三区在线播放 | 日韩精品中文字幕在线 | 亚洲精品成人av | 人人九九精 | 久久色av| av免费观看网站 | 日韩小视频在线观看 | 九九九久久久久久 | 亚洲精品资源在线观看 | 免费观看一级视频 | 日韩免费av | 五月天婷婷激情 | 人人射av| 久久久成人免费 | 国产精品久久久久久模特 | 久久99精品国产麻豆婷婷洗澡 | 蜜桃视频一区 | 欧美国产精品一区二区 | 久草国产视频 | 久青草视频 |