最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年01月27日 08:51:10   作者:張釗  
這篇文章主要介紹了Java中String判斷值為null或空及地址是否相等的問題,文中舉了簡單的例子對字符串類型的值和地址問題進行講解,需要的朋友可以參考下

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

if (name == "") {
//do something
}

2,錯誤用法二:

if (name.equals("")) {
//do something
}


3,錯誤用法三:

if (!name.equals("")) {
//do something
}


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

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

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

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

或者

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


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

TestNullOrEmpty.java

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 錯誤的寫法 
      //別用這種寫法 
    } 
  }
}

編譯執(zhí)行:

c:\>javac TestNullOrEmpty.java

c:\>java TestNullOrEmpty

value is null.
value is blank but not null.
value is " "
value is "hello me!"


比較String地址相等

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.通過字符串函數操作拼接或者截取到的字符串跟靜態(tài)字符串變量也是不共享的。

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

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

相關文章

  • JAVA PDF操作之實現截取N頁和多個PDF合并

    JAVA PDF操作之實現截取N頁和多個PDF合并

    這篇文章主要為大家詳細介紹了java關于PDF的一些操作,例如截取N頁并生成新文件,轉圖片以及多個PDF合并,文中的示例代碼講解詳細,感興趣的可以了解下
    2025-01-01
  • jQuery.event.trigger()的簡單解釋

    jQuery.event.trigger()的簡單解釋

    今天小編就為大家分享一篇關于jQuery.event.trigger()的簡單解釋,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • maven打生產環(huán)境可執(zhí)行包的實現

    maven打生產環(huán)境可執(zhí)行包的實現

    本文主要介紹了maven打生產環(huán)境可執(zhí)行包的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • SpringBoot之HandlerInterceptor攔截器的使用詳解

    SpringBoot之HandlerInterceptor攔截器的使用詳解

    這篇文章主要介紹了SpringBoot之HandlerInterceptor攔截器的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • SpringBoot項目接收前端參數的11種方式

    SpringBoot項目接收前端參數的11種方式

    在前后端項目交互中,前端傳遞的數據可以通過HTTP請求發(fā)送到后端, 后端在Spring Boot中如何接收各種復雜的前端數據呢?這篇文章總結了11種在Spring Boot中接收前端數據的方式,需要的朋友可以參考下
    2024-12-12
  • RabbitMQ在Spring Boot中的使用步驟

    RabbitMQ在Spring Boot中的使用步驟

    在Spring Boot中使用RabbitMQ涉及多個步驟,包括配置、創(chuàng)建監(jiān)聽器和發(fā)送消息,下面給大家分享RabbitMQ在Spring Boot中的使用步驟,感興趣的朋友一起看看吧
    2024-07-07
  • C++和Java命令行繪制心形圖案

    C++和Java命令行繪制心形圖案

    這篇文章主要為大家詳細介紹了C++和Java命令行繪制心形圖案,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • RocketMQ源碼解析topic創(chuàng)建機制詳解

    RocketMQ源碼解析topic創(chuàng)建機制詳解

    這篇文章主要為大家介紹了RocketMQ源碼解析topic創(chuàng)建機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • java多線程學習之死鎖的模擬和避免(實例講解)

    java多線程學習之死鎖的模擬和避免(實例講解)

    下面小編就為大家?guī)硪黄猨ava多線程學習之死鎖的模擬和避免(實例講解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • JAVA調用JavaScript方法代碼示例

    JAVA調用JavaScript方法代碼示例

    之前在一次機緣巧合的情況下,需要時用JAVA執(zhí)行js方法,查閱了一些文檔,找到了相關解決方法,這里和大家分享一下,這篇文章主要給大家介紹了關于JAVA調用JavaScript方法的相關資料,需要的朋友可以參考下
    2023-09-09

最新評論

扶风县| 通州市| 梁平县| 金昌市| 万载县| 齐齐哈尔市| 封丘县| 景谷| 辰溪县| 曲阜市| 双桥区| 郯城县| 资溪县| 都江堰市| 江都市| 化隆| 灵石县| 西平县| 克什克腾旗| 固镇县| 桃江县| 新乐市| 永年县| 乌拉特后旗| 大关县| 大田县| 育儿| 廉江市| 莒南县| 绥化市| 右玉县| 北京市| 广河县| 武夷山市| 宝兴县| 忻城县| 工布江达县| 闽清县| 甘孜县| 南召县| 若尔盖县|