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

Java中的==使用方法詳解

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

Java中的==

Java中的==表示的是什么呢?有時候很令人費(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是自定義的一個類,結(jié)構(gòu)如下:

package com.yds.test;

public class TestObject {
	public TestObject(){
		
	}
}

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

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

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

2 字符串常量池

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

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

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

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

例一示例圖

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

對象的引用存放在棧中,String str是對象的引用

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

圖片.png

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

String str = new String(“wo”)創(chuàng)建了幾個對象?如果字符串常量池中沒有“wo”,則該句創(chuàng)建了兩個對象,首先會創(chuàng)建一個“wo”存放在字符串常量池中,其本身就是一個對象;然后會new 一個字符串對象,并將“wo”的引用返回給new出來的對象;如果字符串常量池中有“wo”,則該句只創(chuàng)建了一個對象,因?yàn)樵摼涫紫葧檎易址A砍刂惺欠翊嬖凇皐o”,如果存在則直接返回"wo"的引用給new出來的對象。

3 總結(jié)

==使用總結(jié)

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

如果是對象類型,==判斷的是對象的地址

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

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

相關(guān)文章

  • idea每次新打開的項(xiàng)目窗口maven都要重新設(shè)置問題

    idea每次新打開的項(xiàng)目窗口maven都要重新設(shè)置問題

    這篇文章主要介紹了idea每次新打開的項(xiàng)目窗口maven都要重新設(shè)置問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot詳解Banner的使用

    SpringBoot詳解Banner的使用

    這篇文章主要介紹了超個性修改SpringBoot項(xiàng)目的啟動banner的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot配置連接兩個或多個數(shù)據(jù)庫的實(shí)現(xiàn)

    SpringBoot配置連接兩個或多個數(shù)據(jù)庫的實(shí)現(xiàn)

    本文主要介紹了SpringBoot配置連接兩個或多個數(shù)據(jù)庫的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • java中實(shí)現(xiàn)一個定時任務(wù)的方式

    java中實(shí)現(xiàn)一個定時任務(wù)的方式

    本文介紹了三種在Java中實(shí)現(xiàn)定時任務(wù)的方法,并推薦使用Spring Boot注解方式,介紹了如何使用`@Scheduled`注解結(jié)合Cron表達(dá)式來設(shè)置定時任務(wù),并提供了一個示例配置文件
    2025-03-03
  • idea中導(dǎo)入別人的springboot項(xiàng)目的方法(圖文)

    idea中導(dǎo)入別人的springboot項(xiàng)目的方法(圖文)

    這篇文章主要介紹了idea中導(dǎo)入別人的springboot項(xiàng)目的方法(圖文),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • idea創(chuàng)建spring boot工程及配置文件(最新推薦)

    idea創(chuàng)建spring boot工程及配置文件(最新推薦)

    本文給大家介紹idea創(chuàng)建spring boot工程及配置文件,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • Spring Boot優(yōu)雅使用RocketMQ的方法實(shí)例

    Spring Boot優(yōu)雅使用RocketMQ的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Spring Boot優(yōu)雅使用RocketMQ的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java利用正則取標(biāo)簽之間的數(shù)據(jù)

    Java利用正則取標(biāo)簽之間的數(shù)據(jù)

    這篇文章主要介紹了Java利用正則取標(biāo)簽之間的數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Spring?Boot?3.3?實(shí)現(xiàn)職責(zé)鏈模式輕松應(yīng)對電商訂單流程分析

    Spring?Boot?3.3?實(shí)現(xiàn)職責(zé)鏈模式輕松應(yīng)對電商訂單流程分析

    在電商系統(tǒng)中,訂單處理流程包括庫存校驗(yàn)、優(yōu)惠券驗(yàn)證、運(yùn)費(fèi)計(jì)算等多個步驟,這些步驟具有順序依賴性,為了管理這些業(yè)務(wù)邏輯,職責(zé)鏈模式提供了解決方案,通過鏈?zhǔn)疥P(guān)系將處理邏輯模塊化,實(shí)現(xiàn)解耦和靈活擴(kuò)展,本文將探討如何結(jié)合SpringBoot實(shí)現(xiàn)職責(zé)鏈模式,優(yōu)化電商訂單處理流程
    2024-10-10
  • SpringBoot如何集成PageHelper分頁功能

    SpringBoot如何集成PageHelper分頁功能

    這篇文章主要介紹了SpringBoot如何集成PageHelper分頁功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03

最新評論

综艺| 页游| 旌德县| 五家渠市| 准格尔旗| 吉木萨尔县| 资源县| 微山县| 库尔勒市| 繁昌县| 邓州市| 卢龙县| 营口市| 乡宁县| 太仓市| 祁阳县| 弋阳县| 昭通市| 靖江市| 双城市| 吴桥县| 和静县| 波密县| 丰原市| 石渠县| 黔江区| 蒙阴县| 获嘉县| 景东| 白朗县| 丰台区| 宜君县| 米脂县| 河北区| 西安市| 耒阳市| 永春县| 武邑县| 筠连县| 平昌县| 吴桥县|