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

基于java中的null類型---有關(guān)null的9件事

 更新時(shí)間:2021年08月24日 10:34:57   作者:我真的不是C羅  
這篇文章主要介紹了java中的null類型---有關(guān)null的9件事,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

今天聽到一個(gè)問題,java中的null類型,null竟然是一種類型

java語言中有兩種類型,一種是基本類型,還有一種是引用類型。還有一個(gè)特殊的null類型即表達(dá)式null的類型,它沒有名字。

因?yàn)閚ull類型沒有名字,所以不可能聲明為null類型的變量或者轉(zhuǎn)換為null類型。

null引用是null類型表達(dá)式唯一可能的值。

null引用可以轉(zhuǎn)換為任意引用類型。

實(shí)際上,程序員可以忽略null類型,可以認(rèn)為null僅僅是一個(gè)可以稱為任何引用類型的特殊符號(hào)。

一個(gè)null類型(null(空)引用是這種類型的唯一的一個(gè)值),可以賦值給任意類型,將返回一個(gè)該類型對(duì)象的空引用(其實(shí)還是null)。

對(duì)于java程序員來說,null是令人頭痛的東西。時(shí)常會(huì)受到空指針異常的騷擾。所以要好好了解一下null,確保正確使用null。

關(guān)于null的9件事

1、首先,null是java中的關(guān)鍵字,像public、static、final

它是大小寫敏感的,你不能將null寫成Null或NULL,編譯器將不能識(shí)別他們?nèi)缓髨?bào)錯(cuò)。

現(xiàn)在,當(dāng)你在敲代碼的時(shí)候,IDE可以糾正這個(gè)錯(cuò)誤。

2、就像每種原始類型都有默認(rèn)值一樣

int默認(rèn)值為0,boolean的默認(rèn)值為false,null是任何引用類型的默認(rèn)值,不嚴(yán)格的說是所有object類型的默認(rèn)值。就像你創(chuàng)建了一個(gè)布爾類型的變量,它將false作為自己的默認(rèn)值,java中的任何引用變量都將null作為默認(rèn)值。這對(duì)所有變量都是適用的,如成員變量、局部變量、實(shí)例變量、靜態(tài)變量(但當(dāng)你使用一個(gè)沒有初始化的局部變量,編譯器會(huì)警告你)。

這對(duì)靜態(tài)和非靜態(tài)的object來說都是正確的。就像你在這里看到的這樣,myObj定義為靜態(tài)引用,所以可以在主方法里直接使用它。注意:主方法是靜態(tài)方法,不可使用非靜態(tài)變量。

3、要澄清一些誤解

null既不是對(duì)象也不是一種類型,它僅是一種特殊的值,你可以將其賦予任何引用類型,你也可以將null轉(zhuǎn)化成任何類型,

可以看到idea并沒有報(bào)錯(cuò),可以正常編譯。在編譯和運(yùn)行時(shí)期,將null強(qiáng)制轉(zhuǎn)換成任何引用類型都是可行的,在運(yùn)行時(shí)期都不會(huì)拋出空指針異常。

4、null可以賦值給引用變量

不能將null賦值給基本類型變量,如int、double、float、boolean。

可以看到,直接將null賦值給基本類型會(huì)出現(xiàn)編譯錯(cuò)誤。但將null賦值給包裝類object,然后將object賦給各自的基本類型,編譯不會(huì)報(bào)錯(cuò),但運(yùn)行會(huì)空指針,這是自動(dòng)拆箱導(dǎo)致的。

5、任何含有null值的包裝類

在java拆箱生成基本數(shù)據(jù)類型時(shí)候都會(huì)拋出一個(gè)空指針異常。

這段代碼看起來非常簡(jiǎn)單并且沒有錯(cuò)誤。你所做的一切是找到一個(gè)數(shù)字在數(shù)組中出現(xiàn)了多少次, 這是Java數(shù)組中典型的尋找重復(fù)的技術(shù)。

開發(fā)者首先得到以前的數(shù)值,然后再加一,最后把值放回Map里。程序員可能會(huì)以為,調(diào)用put方法時(shí),自動(dòng)裝箱會(huì)自己處理好將int裝箱成Interger,但是他忘記了當(dāng)一個(gè)數(shù)字沒有計(jì)數(shù)值的時(shí)候,HashMap的get()方法將會(huì)返回null,而不是0,因?yàn)镮nteger的默認(rèn)值是null而不是0。

當(dāng)把null值傳遞給一個(gè)int型變量的時(shí)候自動(dòng)裝箱將會(huì)返回空指針異常。設(shè)想一下,如果這段代碼在一個(gè)if嵌套里,沒有在測(cè)試環(huán)境下運(yùn)行,但是你一旦放在生產(chǎn)環(huán)境里,BOOM:-),是不是美茲茲。

6、如果使用了帶有null值的引用類型的變量,instanceof操作會(huì)返回false

這是instanceof操作一個(gè)很重要的特性,使得對(duì)強(qiáng)制類型轉(zhuǎn)換檢查很有用

7、可以使用靜態(tài)方法來使用一個(gè)值為null的引用類型變量

因?yàn)殪o態(tài)方法使用靜態(tài)類型綁定,不會(huì)拋空指針異常

8、可以將null傳遞給方法使用

這時(shí)方法可以接收任何引用類型,如 public void print(Object obj) 可以這樣調(diào)用print(null).編譯可以通過,但結(jié)果就取決去你的方法了。這個(gè)例子中的print方法,不會(huì)拋出空指針異常,只是退出,業(yè)務(wù)邏輯允許的話,推薦使用null安全的方法。

9、可以使用== 或者 != 操作來比較null值

但是不能使用其他算法或者邏輯操作,如大于、小于。與SQL不同,java中的null==null會(huì)返回true;

避免空指針異??梢允鼓愕拇a變的null安全。

敲黑板,劃重點(diǎn)?。。?!——————>null是任何一個(gè)引用類型變量的默認(rèn)值,在java中不能使用null引用來調(diào)用任何instance方法或者instance變量。

Java: null是什么??

null是什么?

對(duì)于一條實(shí)例化語句:

Student stu=new Student();    //語句1

先是聲明一個(gè)名為stu的Student類型變量,然后利用new關(guān)鍵字為其創(chuàng)建實(shí)例。

與下面的語句相比較:

Student stu;                            //語句2

語句2是聲明一個(gè)類型為Student 的變量stu,從表述習(xí)慣上講stu 是實(shí)例變量,但實(shí)際上此時(shí)stu并未成為一個(gè)真正的實(shí)例,它僅僅只是一個(gè)變量名字。

stu= new Student();                //語句3

語句3的執(zhí)行結(jié)果就使得stu真正成為了一個(gè)Student實(shí)例,它指向了內(nèi)存中的某塊地址空間。

語句1是一步到位,定義了一個(gè)實(shí)例變量并同時(shí)賦值。

1、對(duì)于null的理解

為了明確地表示那些僅有名字而沒有實(shí)例空間的變量的具體內(nèi)容,Java引入了關(guān)鍵字null, null 就是表示“空”的意思,是絕對(duì)意義上的空,這個(gè)空指的是不存在的意思。為了更好地理解null是什么,這里舉個(gè)例子:

有個(gè)準(zhǔn)備進(jìn)人施工階段的樓字建筑項(xiàng)目,設(shè)計(jì)圖紙已經(jīng)確定了,建筑設(shè)計(jì)師們正在討論某間單元的裝修效果時(shí),該單元的房號(hào)已經(jīng)命名,假設(shè)為A901,此時(shí),A901就是null的,它相當(dāng)于上面寫的語句2(一個(gè)名為stu的Student),這里它只是一個(gè)名為A901的房屋單元。

而當(dāng)該樓字項(xiàng)目已經(jīng)施工完畢的時(shí)候,則A901就地在它所處的位置上真正地占有了一塊物理空間,此時(shí)它就是非null(非空)了,也就是說它擁有了一塊實(shí)例化的空間。就算這間房屋里頭沒有擺放東西,它也是存在的。我們千萬不能將日常表達(dá)語“一間空的房問”等同于Java語言中的"房間為空”。

在Java中,假設(shè)房間類為Room,則:

Room room=null; //房間為空,房間room只是一個(gè)名字,實(shí)際不存在。
Room room= new Room(); //一間空的房間,這間房里沒東西。 

null就是空,抽象意義上的空,空就是無的概念。

對(duì)于null的理解,應(yīng)該是這樣的:僅有一個(gè)變量名,但實(shí)際上不存在。

2、null的作用

(1) 判斷一個(gè)對(duì)象實(shí)例是否null,

用if(obj= = null){}來判斷。

(2) 釋放內(nèi)存,讓一個(gè)非null的實(shí)例變量賦值為null,這樣這個(gè)實(shí)例指針引用就被釋放了,等待JVM回收其對(duì)應(yīng)的內(nèi)存垃圾。

3、使用null時(shí)要注意的問題

(1) null是關(guān)鍵字,是大小寫敏感的,不能將null寫成Null或NULL.

(2) null用來標(biāo)識(shí)一個(gè)空的對(duì)象,因此不能將null賦給基本型的變量。比如:

String s= null; //正確
int i=null; //錯(cuò)誤,應(yīng)修正為"int i=0;"char c= null; //錯(cuò)誤

(3) 對(duì)于一個(gè)值為null 的對(duì)象,如果你試圖去訪問其成員,則會(huì)觸發(fā)空指針異常(NullPointerException)。

(4) 用instancaeof(判斷對(duì)象是否屬于某種類型)去操作null對(duì)象,會(huì)返回false.

如:有語句: String s= null;

則“s instanceof String”的結(jié)果是false。

(5) 可以使==或著!=操作來比較null值,但是不能使用其他算法或者邏輯操作,例如<或者>。

在Java中,null ==null將返回true。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中List常用的4種stream()方法解析

    java中List常用的4種stream()方法解析

    Java中的List接口從Java 8開始新增了stream()方法,用于創(chuàng)建一個(gè)Stream流對(duì)象,這篇文章主要給大家介紹了關(guān)于java中List常用的4種stream()方法的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • Kotlin教程之函數(shù)和包的定義和流程控制

    Kotlin教程之函數(shù)和包的定義和流程控制

    這篇文章主要介紹了Kotlin教程之函數(shù)和包的定義和流程控制的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • SpringBoot2如何集成Elasticsearch6.x(TransportClient方式)

    SpringBoot2如何集成Elasticsearch6.x(TransportClient方式)

    這篇文章主要介紹了SpringBoot2如何集成Elasticsearch6.x(TransportClient方式)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 利用java制作一個(gè)小的目錄查詢器的方法

    利用java制作一個(gè)小的目錄查詢器的方法

    下面小編就為大家?guī)硪黄胘ava制作一個(gè)小的目錄查詢器的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • java實(shí)現(xiàn)快速排序圖文詳解

    java實(shí)現(xiàn)快速排序圖文詳解

    網(wǎng)上關(guān)于快速排序的算法原理和算法實(shí)現(xiàn)都比較多,不過java是實(shí)現(xiàn)并不多,而且部分實(shí)現(xiàn)很難理解,和思路有點(diǎn)不搭調(diào)。所以整理了這篇文章。如果有不妥之處還請(qǐng)建議
    2021-08-08
  • IDEA查看Scala的源碼的教程圖解

    IDEA查看Scala的源碼的教程圖解

    這篇文章主要介紹了IDEA查看Scala的源碼的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java使用mybatis調(diào)用存儲(chǔ)過程返回一個(gè)游標(biāo)結(jié)果集方式

    java使用mybatis調(diào)用存儲(chǔ)過程返回一個(gè)游標(biāo)結(jié)果集方式

    這篇文章主要介紹了java使用mybatis調(diào)用存儲(chǔ)過程返回一個(gè)游標(biāo)結(jié)果集方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Maven介紹與配置+IDEA集成Maven+使用Maven命令小結(jié)

    Maven介紹與配置+IDEA集成Maven+使用Maven命令小結(jié)

    Maven是Apache軟件基金會(huì)的一個(gè)開源項(xiàng)目,是一個(gè)優(yōu)秀的項(xiàng)目構(gòu)建管理工具,它用來幫助開發(fā)者管理項(xiàng)目中的 jar,以及 jar 之間的依賴關(guān)系、完成項(xiàng)目的編譯、測(cè)試、打包和發(fā)布等工作,本文給大家介紹Maven介紹與配置+IDEA集成Maven+使用Maven命令,感興趣的朋友一起看看吧
    2024-01-01
  • 在Mac OS上安裝Tomcat服務(wù)器的教程

    在Mac OS上安裝Tomcat服務(wù)器的教程

    這篇文章主要介紹了在Mac OS上安裝Tomcat服務(wù)器的教程,方便進(jìn)行工作環(huán)境下的Java web開發(fā),需要的朋友可以參考下
    2015-11-11
  • Java使用FTPClient類讀寫FTP

    Java使用FTPClient類讀寫FTP

    這篇文章主要為大家詳細(xì)介紹了Java使用FTPClient類讀寫FTP的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評(píng)論