欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

2,錯誤用法二:

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


3,錯誤用法三:

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


我們來解說一下:
上述錯誤用法1是初學(xué)者最容易犯,也最不容易被發(fā)現(xiàn)的錯誤,因?yàn)樗鼈兊恼Z法本身沒問題,Java編譯器編譯時(shí)不報(bào)錯。但這種條件可能在運(yùn)行時(shí)導(dǎo)致程序出現(xiàn)bug,永遠(yuǎn)也不會為true,也就是時(shí)說,if塊里的語句永遠(yuǎn)也不會被執(zhí)行。

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

正確的寫法應(yīng)該先加上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 
  } 
 
} 

總結(jié):

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

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

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

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

相關(guān)文章

  • IDEA2020.3.2版本自動注釋類和方法注釋模板配置步驟詳解

    IDEA2020.3.2版本自動注釋類和方法注釋模板配置步驟詳解

    這篇文章主要介紹了IDEA2020.3.2版本自動注釋類和方法注釋模板配置步驟,本文給大家分享了我自己創(chuàng)建過程通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java 獲取 jar包以外的資源操作

    Java 獲取 jar包以外的資源操作

    這篇文章主要介紹了Java 獲取 jar包以外的資源操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • mybatis update更新字段的使用操作

    mybatis update更新字段的使用操作

    這篇文章主要介紹了mybatis update更新字段的使用操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java實(shí)現(xiàn)計(jì)算圖中兩個頂點(diǎn)的所有路徑

    Java實(shí)現(xiàn)計(jì)算圖中兩個頂點(diǎn)的所有路徑

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)計(jì)算圖中兩個頂點(diǎn)的所有路徑功能,文中通過示例詳細(xì)講解了實(shí)現(xiàn)的方法,需要的可以參考一下
    2022-10-10
  • Springboot使用@Cacheable注解實(shí)現(xiàn)數(shù)據(jù)緩存

    Springboot使用@Cacheable注解實(shí)現(xiàn)數(shù)據(jù)緩存

    本文介紹如何在Springboot中通過@Cacheable注解實(shí)現(xiàn)數(shù)據(jù)緩存,在每次調(diào)用添加了@Cacheable注解的方法時(shí),Spring 會檢查指定參數(shù)的指定目標(biāo)方法是否已經(jīng)被調(diào)用過,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-10-10
  • 關(guān)于log4j日志擴(kuò)展---自定義PatternLayout

    關(guān)于log4j日志擴(kuò)展---自定義PatternLayout

    這篇文章主要介紹了關(guān)于log4j日志擴(kuò)展---自定義PatternLayout,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(33)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(33)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • 從SpringMVC遷移到Springboot的方法步驟

    從SpringMVC遷移到Springboot的方法步驟

    本篇文章主要介紹了從SpringMVC遷移到Springboot的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java包機(jī)制及javadoc詳解

    Java包機(jī)制及javadoc詳解

    為了更好地組織類,Java提供了包機(jī)制,用于區(qū)別類名的命名空間,一般利用公司域名倒置作為包名,這篇文章主要介紹了Java包機(jī)制以及javadoc,需要的朋友可以參考下
    2022-10-10
  • 淺談Java內(nèi)存泄露

    淺談Java內(nèi)存泄露

    內(nèi)存泄漏(Memory Leak)是指程序中己動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費(fèi),導(dǎo)致程序運(yùn)行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果。下面我們來一起了解如何解決
    2019-05-05

最新評論