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

Java數(shù)據(jù)類型之引用數(shù)據(jù)類型解讀

 更新時(shí)間:2023年07月31日 10:59:49   作者:墨末..  
這篇文章主要介紹了Java數(shù)據(jù)類型之引用數(shù)據(jù)類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java數(shù)據(jù)類型之引用數(shù)據(jù)類型

在Java中除了8種基本數(shù)據(jù)類型外,其他數(shù)據(jù)類型全部都是引用(reference)數(shù)據(jù)類型,引用數(shù)據(jù)類型用來表示復(fù)雜數(shù)據(jù)類型,如下圖所示,包含:類、接口和數(shù)組聲明的數(shù)據(jù)類型。

引用數(shù)據(jù)類型:有類,接口,數(shù)組等。

Java中的引用數(shù)據(jù)類型,相當(dāng)于C等語言中指針(pointer)類型,引用事實(shí)上就是指針,是指向一個(gè)對(duì)象的內(nèi)存地址。引用數(shù)據(jù)類型變量中保持的是指向?qū)ο蟮膬?nèi)存地址。

很多資料上提到Java不支持指針,事實(shí)上是不支持指針計(jì)算,而指針類型還是保留了下來,只是在Java中稱為引用數(shù)據(jù)類型。

int x = 7; 
int y = x; 
String str1 = "Hello"; 
String str2 = str1; 
str2 = "World"; 

上述代碼聲明了兩個(gè)基本數(shù)據(jù)類型(int)和兩個(gè)引用數(shù)據(jù)類型(String)。當(dāng)程序執(zhí)行完第②行代碼后,x值為7,x賦值給y,這時(shí)y的值也是7,它們的保持方式如圖1所示,x和y兩個(gè)變量值都是7,但是它們之間是獨(dú)立的,任何一個(gè)變化都不會(huì)影響另一個(gè)。

當(dāng)程序執(zhí)行完第③行時(shí),字符串“Hello”對(duì)象被創(chuàng)建,保持到內(nèi)存地0x12345678中,str1是引用類型變量,它保存的是內(nèi)存地址0x12345678,這個(gè)地址指向“Hello”對(duì)象。

當(dāng)程序執(zhí)行完第④行時(shí),str1變量內(nèi)容(0x12345678)被賦值給str2是引用類型變量,這樣一來str1和str2保存了相同的內(nèi)存地址,都指向“Hello”對(duì)象。見圖1所示,此時(shí)str1和str2本質(zhì)上是引用一個(gè)對(duì)象,通過任何一個(gè)引用都可以修改對(duì)象本身。

當(dāng)程序執(zhí)行完第⑤行時(shí),字符串“World”對(duì)象被創(chuàng)建,保持到內(nèi)存地址0x23455678中,地址保存到str2變量中,此時(shí),str1和str2不再指向相同內(nèi)存地址,見圖2所示。

圖一:引用數(shù)據(jù)類型賦值過程1

圖二:引用數(shù)據(jù)類型賦值過程2

java理解引用數(shù)據(jù)類型

一.java中基礎(chǔ)數(shù)據(jù)類型與引用數(shù)據(jù)類型的區(qū)別

1.1基礎(chǔ)數(shù)據(jù)類與引用數(shù)據(jù)類型介紹

1.基礎(chǔ)數(shù)據(jù)類型:

  • ①整數(shù)類型:long、int、short、byte
  • ②浮點(diǎn)類型:float、double
  • ③字符類型:char
  • ④布爾類型:boolean

2.引用數(shù)據(jù)類型:類、 接口類型、 數(shù)組類型、 枚舉類型、 注解類型、 字符串型,例:String類型就是引用類型。

1.2存儲(chǔ)位置的區(qū)別 

  • 基本變量類型

在方法中定義的非全局基本數(shù)據(jù)類型變量的具體內(nèi)容是存儲(chǔ)在棧中的

  • 引用變量類型

只要是引用數(shù)據(jù)類型變量,其具體內(nèi)容都是存放在堆中的,而棧中存放的是其具體內(nèi)容所在內(nèi)存的地址

如圖:

  • 基本數(shù)據(jù)類型              

引用數(shù)據(jù)類型:

 

 

1.3傳遞方式的區(qū)  

  • 基本變量類型

在方法中定義的非全局基本數(shù)據(jù)類型變量,調(diào)用方法時(shí)作為參數(shù)是按數(shù)值傳遞

  • 引用變量類型

引用數(shù)據(jù)類型變量,調(diào)用方法時(shí)作為參數(shù)是按引用傳遞的,傳遞的是引用的副本

 

 二.String判斷字符串相等

2.1java中字符串的基本存儲(chǔ)原理           

  • 1.常量池中的字符串僅是符號(hào),第一次用到的時(shí)候才變?yōu)閷?duì)象           
  • 2.利用串池的機(jī)制,來避免重復(fù)創(chuàng)建字符串對(duì)象           
  • 3.字符串常量拼接原理是StringBuilder(1.8)           
  • 4.可以使用intern方法,主動(dòng)將串池中還沒有的字符串放入串池(1.8是放入,1.6是復(fù)制副本放入)

2.2舉例

public class ComPareString {    public void test(){        String str1="a";//"a"第一次用到,變?yōu)閷?duì)象        String str2="b";        String str3="a";//判斷str1==str3為true,str1與str2指向的都是在串池中的對(duì)象"a"        String str4="ab";        String str5="a"+"b";//判斷str4==str5為true,str4在編譯的過程中就完成了拼接為"ab"                            // ,與上述同理,與str4所指是同一對(duì)象        String str6=str1+str2;//判斷str4==str6為false,str1與str2為變量,實(shí)際上是         //new StringBuilder().append("a").append("b").toString(),即new String("ab")          //新創(chuàng)建了對(duì)象,并不是在串池中的"ab",所以為false                                String str7=str6.intern();?       //將str6字符串對(duì)象放入串池中,如果串池中有就不會(huì)放入,如果沒有就會(huì)放入,最后會(huì)把串池中的對(duì)象返回        //所以str7現(xiàn)在所指的對(duì)象與str4是一樣的,str4與str6不相等,故判斷str6==str7為false                        String s8=new String("abc");        String s9=s8.intern();//判斷s8==s9,如果jdk為1.8則為true,如果jdk為1.6則為false    }}

三.java創(chuàng)建鏈表錯(cuò)誤點(diǎn)

Node h = new Node();
Node n=new Node();
Node n2=h.next;
n2=n;
//奇奇怪怪的錯(cuò)誤(捂臉),無論next是null或是非null都不可以這樣寫,n2=n就是把n的引用賦值給了n2,這樣的話n2與h.next就沒有任何關(guān)系了
//正確寫法
n.next=null;
h.next=n;

總結(jié)

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

相關(guān)文章

  • Java基于elasticsearch實(shí)現(xiàn)集群管理

    Java基于elasticsearch實(shí)現(xiàn)集群管理

    這篇文章主要介紹了java基于elasticsearch實(shí)現(xiàn)集群管理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • MyBatis typeAliases元素標(biāo)簽(含注解方式)及其屬性、設(shè)置方式

    MyBatis typeAliases元素標(biāo)簽(含注解方式)及其屬性、設(shè)置方式

    這篇文章主要介紹了MyBatis typeAliases元素標(biāo)簽(含注解方式)及其屬性、設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java對(duì)象序列化與反序列化原理解析

    java對(duì)象序列化與反序列化原理解析

    這篇文章主要介紹了java對(duì)象序列化與反序列化原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • spring的父子容器及配置詳解

    spring的父子容器及配置詳解

    本篇文章主要介紹了spring的父子容器及配置詳解,詳細(xì)的介紹了spring父子容器的概念、使用場景和用法,有興趣的可以了解一下
    2018-01-01
  • 深入理解Spring MVC的數(shù)據(jù)轉(zhuǎn)換

    深入理解Spring MVC的數(shù)據(jù)轉(zhuǎn)換

    這篇文章主要給大家介紹了關(guān)于Spring MVC數(shù)據(jù)轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起看看吧。
    2017-09-09
  • springboot讀取文件,打成jar包后訪問不到的解決

    springboot讀取文件,打成jar包后訪問不到的解決

    這篇文章主要介紹了springboot讀取文件,打成jar包后訪問不到的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot配置開發(fā)環(huán)境的詳細(xì)步驟(JDK、Maven、IDEA等)

    SpringBoot配置開發(fā)環(huán)境的詳細(xì)步驟(JDK、Maven、IDEA等)

    文章介紹了如何配置SpringBoot開發(fā)環(huán)境,包括安裝JDK、Maven和IDEA,并提供了詳細(xì)的步驟和配置方法,感興趣的朋友一起看看吧
    2024-12-12
  • Springboot集成graylog及配置過程解析

    Springboot集成graylog及配置過程解析

    這篇文章主要介紹了Springboot集成graylog及配置過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 利用Java實(shí)現(xiàn)讀取WPS?Excel中嵌入的圖片

    利用Java實(shí)現(xiàn)讀取WPS?Excel中嵌入的圖片

    許多數(shù)據(jù)文件中可能包含嵌入式圖片,這些圖片對(duì)于數(shù)據(jù)分析和可視化非常重要,下面我們就來看看如何使用Java讀取WPS?Excel中嵌入的圖片吧
    2024-11-11
  • Java合并兩個(gè)List后并去掉重復(fù)項(xiàng)的兩種做法

    Java合并兩個(gè)List后并去掉重復(fù)項(xiàng)的兩種做法

    工作中很多時(shí)候需要用到合并兩個(gè)List并去除其中的重復(fù)內(nèi)容,這是一個(gè)很簡單的操作,實(shí)現(xiàn)的方法也多種多樣,這篇文章主要給大家介紹了關(guān)于Java合并兩個(gè)List后并去掉重復(fù)項(xiàng)的兩種做法,需要的朋友可以參考下
    2023-10-10

最新評(píng)論