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

Java中的==使用方法詳解

 更新時(shí)間:2021年09月28日 14:44:17   作者:It一zhai男  
這篇文章主要給大家介紹了關(guān)于Java中的==使用方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Java中的==

Java中的==表示的是什么呢?有時(shí)候很令人費(fèi)解。比如,以下例子輸出是什么?

		// 例一
		String str = "wo";
		String str1 = "wo";
		System.out.println("例一:" + (str == str1));

		// 例二
		String str2 = new String("wo");
		String str3 = new String("wo");
		System.out.println("例二:" + (str2 == str3));

		// 例三
		int i1 = 1;
		int i2 = 1;
		System.out.println("例三:" + (i1 == i2));

		// 例四
		TestObject t1 = new TestObject();
		TestObject t2 = new TestObject();
		System.out.println("例四:" + (t1 == t2));

其中,TestObject是自定義的一個(gè)類,結(jié)構(gòu)如下:

package com.yds.test;

public class TestObject {
	public TestObject(){
		
	}
}

最終的結(jié)果輸出什么呢?結(jié)果如下:

例一:true
例二:false
例三:true
例四:false

其實(shí),在Java中,如果是基本數(shù)據(jù)類型,則 == 比較的是值;如果是對(duì)象類型,則 == 比較的是對(duì)象的地址。但是,有時(shí)候會(huì)疑惑,String不是對(duì)象類型么?為什么例一是true呢?這個(gè)就要談?wù)勛址A砍氐膯?wèn)題。

2 字符串常量池

String類是我們平常項(xiàng)目中使用頻率非常高的一種對(duì)象類型,JVM為了提升性能和減少開(kāi)銷,避免字符串的重復(fù)創(chuàng)建,維護(hù)了一塊特殊的內(nèi)存空間,即字符串常量池。當(dāng)需要使用字符串時(shí),先去字符串常量池查看該字符串是否已經(jīng)存在,如果存在,則可直接使用;如果不存在,初始化,并將該字符串放入到字符串常量池中。

在JDK1.6及之前版本,字符串常量池在方法區(qū)中

在JDK1.7及以后版本,字符串常量池移到了堆中

使用String str=“wo”,可能創(chuàng)建一個(gè)或者不創(chuàng)建對(duì)象。如果“wo”在字符串常量池中已經(jīng)存在,則不會(huì)再創(chuàng)建String類型的值為“wo”的對(duì)象,而是將str指向這個(gè)“wo”對(duì)象內(nèi)存地址,后續(xù)無(wú)論用這種方式創(chuàng)建多少個(gè)指向“wo”的引用,在內(nèi)存中,都只有一個(gè)“wo”內(nèi)存地址被分配。而==判斷的是對(duì)象內(nèi)存的地址,所以例一返回true。下圖是用這種方式創(chuàng)建字符串的示例圖。

例一示例圖

對(duì)象存放在堆中,字符串常量池是堆中一塊特殊區(qū)域,new出來(lái)的是對(duì)象,字符串可以通過(guò)直接賦值創(chuàng)建一個(gè)對(duì)象,如上所述。

對(duì)象的引用存放在棧中,String str是對(duì)象的引用

在上圖中,棧存放的是字符串的引用,str和str1存放的都是對(duì)象“wo”的內(nèi)存地址,==判斷對(duì)象時(shí),判斷的是他們存儲(chǔ)的內(nèi)存地址是否相同,由上圖可見(jiàn),他們的內(nèi)存地址是相同的,所以例一輸出的是true。

圖片.png

例二的兩個(gè)字符串都是通過(guò)new的方式創(chuàng)建對(duì)象的,所以在堆上有兩個(gè)String對(duì)象,且這兩個(gè)對(duì)象指向字符串常量池中的同一個(gè)對(duì)象“wo”,如上圖所示,此時(shí)str2和str3存儲(chǔ)的對(duì)象地址就不相同,所以例二返回的是false。

String str = new String(“wo”)創(chuàng)建了幾個(gè)對(duì)象?如果字符串常量池中沒(méi)有“wo”,則該句創(chuàng)建了兩個(gè)對(duì)象,首先會(huì)創(chuàng)建一個(gè)“wo”存放在字符串常量池中,其本身就是一個(gè)對(duì)象;然后會(huì)new 一個(gè)字符串對(duì)象,并將“wo”的引用返回給new出來(lái)的對(duì)象;如果字符串常量池中有“wo”,則該句只創(chuàng)建了一個(gè)對(duì)象,因?yàn)樵摼涫紫葧?huì)查找字符串常量池中是否存在“wo”,如果存在則直接返回"wo"的引用給new出來(lái)的對(duì)象。

3 總結(jié)

==使用總結(jié)

如果是基本數(shù)據(jù)類型,==判斷的是值

如果是對(duì)象類型,==判斷的是對(duì)象的地址

通過(guò)直接賦值而不是new的方式給String賦值,如果字符串常量池中有該對(duì)象,則不會(huì)再創(chuàng)建,此時(shí)通過(guò) == 判斷,返回的是true。如:String str=“wo”;String str1=“wo”;str == str1為true.
在JDK1.6及以前版本,字符串常量池在方法區(qū)中;在JDK1.7及以后,字符串常量池在堆中。
對(duì)象的引用保存在棧中

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 在dos窗口中編譯和運(yùn)行java文件的方法

    在dos窗口中編譯和運(yùn)行java文件的方法

    這篇文章主要介紹了在dos窗口中編譯和運(yùn)行java文件的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringMVC中@ModelAttribute注解的使用教程

    SpringMVC中@ModelAttribute注解的使用教程

    在SpringMVC中,我們可以通過(guò)使用@ModelAttribute注解標(biāo)記方法,實(shí)現(xiàn)類似于Struts2中Preparable攔截器的效果,這篇文章主要給大家介紹了關(guān)于SpringMVC中@ModelAttribute注解使用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Java?Redisson多策略注解限流

    Java?Redisson多策略注解限流

    這篇文章主要介紹了Java?Redisson多策略注解限流,文章使用Redisson的RRateLimiter進(jìn)行限流,詳細(xì)介紹,感興趣的小伙伴可以參考下面文章內(nèi)容
    2022-09-09
  • java8?Stream大數(shù)據(jù)量List分批處理切割方式

    java8?Stream大數(shù)據(jù)量List分批處理切割方式

    這篇文章主要介紹了java8?Stream大數(shù)據(jù)量List分批處理切割方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • SpringBoot如何整合nacos詳解

    SpringBoot如何整合nacos詳解

    今天教各位小伙伴SpringBoot是如何整合nacos的,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-06-06
  • JAVA提高第七篇 類加載器解析

    JAVA提高第七篇 類加載器解析

    這篇文章主要為大家詳細(xì)介紹了JAVA提高第七篇類加載器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 解決java.lang.NoClassDefFoundError錯(cuò)誤的問(wèn)題

    解決java.lang.NoClassDefFoundError錯(cuò)誤的問(wèn)題

    在Java開(kāi)發(fā)過(guò)程中,NoClassDefFoundError是一個(gè)常見(jiàn)的運(yùn)行時(shí)錯(cuò)誤,是由于JVM在運(yùn)行時(shí)找不到已編譯的類文件導(dǎo)致的,本文就來(lái)介紹一下如何解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09
  • java中接口和事件監(jiān)聽(tīng)器的深入理解

    java中接口和事件監(jiān)聽(tīng)器的深入理解

    這篇文章主要給大家介紹了關(guān)于java中接口和事件監(jiān)聽(tīng)器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring Boot使用模板引擎JSP實(shí)例解析

    Spring Boot使用模板引擎JSP實(shí)例解析

    這篇文章主要介紹了Spring Boot使用模板引擎JSP實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • SpringSecurity頁(yè)面授權(quán)與登錄驗(yàn)證實(shí)現(xiàn)(內(nèi)存取值與數(shù)據(jù)庫(kù)取值)

    SpringSecurity頁(yè)面授權(quán)與登錄驗(yàn)證實(shí)現(xiàn)(內(nèi)存取值與數(shù)據(jù)庫(kù)取值)

    Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問(wèn)控制解決方案的安全框架,本文主要介紹了SpringSecurity頁(yè)面授權(quán)與登錄驗(yàn)證實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論