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

Java之關(guān)于基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的存放位置

 更新時間:2023年07月31日 11:12:33   作者:roon9527  
這篇文章主要介紹了Java之關(guān)于基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的存放位置,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的存放位置

1、基本數(shù)據(jù)類型存放在哪?

基本類型的變量存在棧里或者堆里不是由"大小可知,生存期可知"就能確定了。

關(guān)鍵是上下文。

比如:

void method(){
	int a = 3;
}

這自然是存在棧里的。局部方法嘛。

而:

class Test {
    int a = 3;
}

這就肯定是隨對象放到堆里的。

**因此,不要孤立的看到基本類型就說放到棧里,看到引用類型就說放到堆里。

**從更深層次去理解它們會更好,例如為什么是在基本類型的實例變量在堆上創(chuàng)建,局部變量在棧上創(chuàng)建,這樣做有什么好處

2、思考

如果你熟悉java的內(nèi)存結(jié)構(gòu)的話就會知道,堆 是所有線程共享的內(nèi)存區(qū)域,棧 是每個線程獨享的,如果你將一個實例變量放在棧內(nèi),那么就不存在多個線程訪問同一個對象資源了,這顯然是不對的,所以實例變量要在堆上創(chuàng)建,也不是線程安全的。

但是對于局部變量,是在棧上創(chuàng)建的,每一次方法調(diào)用創(chuàng)建一個幀,獨享一份內(nèi)存區(qū)域,其他的線程是不會訪問到該線程的資源,在 棧上創(chuàng)建也會減輕GC的壓力,隨著該方法的結(jié)束,幀出棧,相對應(yīng)的內(nèi)存消除,這種局部變量占用的內(nèi)存自然就消失了,因此局部變量是線程安全的。

3、注

基本數(shù)據(jù)類型是放在棧中還是放在堆中,這取決于基本類型聲明的位置。

一:在方法中聲明的變量

即使變量是局部變量,每當(dāng)程序調(diào)用方法時,系統(tǒng)都會為該方法建立一個方法棧,其所在方法中聲明的變量就放在方法棧中,當(dāng)方法結(jié)束系統(tǒng)會釋放方法棧,其對應(yīng)在該方法中聲明的變量隨著棧的銷毀而結(jié)束,這就局部變量只能在方法中有效的原因。

在方法中聲明的變量可以是基本類型的變量,也可以是引用類型的變量。

(1)當(dāng)聲明是基本類型的變量的時,其變量名及值(變量名及值是兩個概念)是放在方法棧中

(2)當(dāng)聲明的是引用變量時,所聲明的變量(該變量實際上是在方法中存儲的是內(nèi)存地址值)是放在方法的棧中,該變量所指向的對象是放在堆類存中的。

二:在類中聲明的變量是成員變量

也叫全局變量,放在堆中的(因為全局變量不會隨著某個方法執(zhí)行結(jié)束而銷毀)。

同樣在類中聲明的變量即可是基本類型的變量 也可是引用類型的變量

(1)當(dāng)聲明的是基本類型的變量其變量名及其值放在堆內(nèi)存中的

(2)引用類型時,其聲明的變量仍然會存儲一個內(nèi)存地址值,該內(nèi)存地址值指向所引用的對象。引用變量名和對應(yīng)的對象仍然存儲在相應(yīng)的堆中.

總結(jié):

基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別

眾所周知Java是一種強類型語言,在Java語言中,Java的數(shù)據(jù)類型一共分為兩大類,分別為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,其中基本數(shù)據(jù)類型細(xì)分小類可分為整數(shù)類型、浮點類型、字符類型、布爾類型這四小類。

基本數(shù)據(jù)類型和引用數(shù)據(jù)類型

1. 基本數(shù)據(jù)類型

只有8種,可按照如下分類 :

  • 整數(shù)類型: long、int、short、byte
  • 浮點類型: float、double
  • 字符類型: char
  • 布爾類型: boolean
No.數(shù)據(jù)類型大小/位可表示數(shù)據(jù)范圍默認(rèn)值
1byte(字節(jié)型)8-128~1270
2short(短整型)16-32768~327670
3int(整型)32-2147483648~21474836470
4long(長整型)64-9223372036854775808~92233720368547758070
5float(單精度)32-3.4E38~3.4E380.0
6double(雙精度)64-1.7E308~1.7E3080.0
7char(字符)160~255‘\u0000’ (其實就是一個空格)
8boolean(布爾)-true或falsefalse

2. 引用數(shù)據(jù)類型

引用數(shù)據(jù)類型非常多,大致包括:類Class、 接口類型Inteface、 數(shù)組類型Array、 枚舉類型Enum、 注解類型、 字符串型

例如,String類型就是引用類型。簡單來說,所有的非基本數(shù)據(jù)類型都是引用數(shù)據(jù)類型。

基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別

1. 存儲位置區(qū)別

a). 基本變量類型

在方法中定義的非全局基本數(shù)據(jù)類型變量的具體內(nèi)容是存儲在棧中的,基本數(shù)據(jù)類型在被創(chuàng)建時,在棧上給其劃分一塊內(nèi)存,將數(shù)值直接存儲在棧上的。

b). 引用變量類型

只要是引用數(shù)據(jù)類型變量(類class、接口interface、數(shù)組array),其變量或者對象的具體內(nèi)容信息都是存放在堆中的,而棧中存放的是其具體內(nèi)容所在內(nèi)存的引用地址

Tips : 通過變量地址可以找到變量的具體內(nèi)容,就如同通過房間號可以找到房間一般

public class Main{
   public static void main(String[] args){
       //基本數(shù)據(jù)類型
       int i=1;
       double d=1.2;
       //引用數(shù)據(jù)類型
       String str="helloworld";
   }
}

c)內(nèi)存劃分:

在這里插入圖片描述

2. 傳遞方式區(qū)別

a. 基本變量類型

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

//基本數(shù)據(jù)類型作為方法參數(shù)被調(diào)用
public class Main{
   public static void main(String[] args){
       int msg = 100;
       System.out.println("調(diào)用方法前msg的值:\n"+ msg);    //100
       fun(msg);
       System.out.println("調(diào)用方法后msg的值:\n"+ msg);    //100
   }
   public static void fun(int temp){
       temp = 0;
   }
}

內(nèi)存空間

在這里插入圖片描述

b. 引用變量類型

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

//引用數(shù)據(jù)類型作為方法參數(shù)被調(diào)用
class Book{
    String name;
    double price;
    public Book(String name,double price){
        this.name = name;
        this.price = price;
    }
    public void getInfo(){
        System.out.println("圖書名稱:"+ name + ",價格:" + price);
    }
    public void setPrice(double price){
        this.price = price;
    }
}
public class Main{
   public static void main(String[] args){
       Book book = new Book("Java開發(fā)指南",66.6);
       book.getInfo();  //圖書名稱:Java開發(fā)指南,價格:66.6
       fun(book);
       book.getInfo();  //圖書名稱:Java開發(fā)指南,價格:99.9
   }
   public static void fun(Book temp){
       temp.setPrice(99.9);
   }
}

調(diào)用時為temp在棧中開辟新空間,并指向book的具體內(nèi)容,方法執(zhí)行完畢后temp在棧中的內(nèi)存被釋放掉

內(nèi)存空間

在這里插入圖片描述

在這里插入圖片描述

總結(jié)

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

相關(guān)文章

  • 解決Maven的pom.xml中設(shè)置repository不起作用問題

    解決Maven的pom.xml中設(shè)置repository不起作用問題

    這篇文章主要介紹了解決Maven的pom.xml中設(shè)置repository不起作用問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • SpringBoot測試類注入Bean失敗的原因及分析

    SpringBoot測試類注入Bean失敗的原因及分析

    SpringBoot 2.2版本前后測試類有所變化,2.2版本之后使用JUnit 5,導(dǎo)入注解@SpringBootTest和@Test來自junit.jupiter.api包;而2.2版本之前使用JUnit 4,需要額外導(dǎo)入@RunWith注解來自junit.runner包,無論哪個版本,都需確保測試類和啟動類的包名一致
    2024-09-09
  • Java實現(xiàn)批量修改txt文件名稱的方法示例

    Java實現(xiàn)批量修改txt文件名稱的方法示例

    這篇文章主要介紹了Java實現(xiàn)批量修改txt文件名稱的方法,結(jié)合實例形式分析了Java針對目錄文件遍歷及文件讀寫、屬性操作等相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • Java并發(fā)容器相關(guān)知識總結(jié)

    Java并發(fā)容器相關(guān)知識總結(jié)

    今天給大家?guī)淼奈恼率荍ava并發(fā)容器的相關(guān)知識,文中有非常詳細(xì)的介紹,對正在學(xué)習(xí)Java并發(fā)容器的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Spring Cache相關(guān)知識總結(jié)

    Spring Cache相關(guān)知識總結(jié)

    今天帶大家學(xué)習(xí)Spring的相關(guān)知識,文中對Spring Cache作了非常詳細(xì)的介紹,對正在學(xué)習(xí)Java Spring的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • IDEA “Cannot resolve symbol”爆紅問題解決

    IDEA “Cannot resolve symbol”爆紅問題解決

    最近發(fā)現(xiàn)個問題,IDEA 無法識別同一個 package 里的其他類,將其顯示為紅色,本文就來介紹一下IDEA “Cannot resolve symbol”爆紅問題解決,感興趣的可以了解一下
    2023-10-10
  • SpringBoot+MyBatisPlus對Map中Date格式轉(zhuǎn)換處理的方法詳解

    SpringBoot+MyBatisPlus對Map中Date格式轉(zhuǎn)換處理的方法詳解

    在?SpringBoot?項目中,?如何統(tǒng)一?JSON?格式化中的日期格式。本文將為大家介紹一種方法:利用MyBatisPlus實現(xiàn)對Map中Date格式轉(zhuǎn)換處理,需要的可以參考一下
    2022-10-10
  • SpringBoot設(shè)置接口超時的方法小結(jié)

    SpringBoot設(shè)置接口超時的方法小結(jié)

    這篇文章主要介紹了SpringBoot設(shè)置接口超時的方法小結(jié),包括配置文件,config配置類及相關(guān)示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • IDEA與JDK、Maven安裝配置完整步驟解析

    IDEA與JDK、Maven安裝配置完整步驟解析

    這篇文章主要介紹了如何安裝和配置IDE(IntelliJ?IDEA),包括IDE的安裝步驟、JDK的下載與配置、Maven的安裝與配置,以及如何在IDE中使用Maven進行Java開發(fā),需要的朋友可以參考下
    2025-03-03
  • Java中的字符串用法小結(jié)

    Java中的字符串用法小結(jié)

    這篇文章主要介紹了Java中的字符串用法,實例總結(jié)了java中關(guān)于字符串操作的各種常用的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04

最新評論

河西区| 金山区| 沙田区| 东海县| 左贡县| 芮城县| 蒙山县| 五寨县| 岢岚县| 柳林县| 墨江| 泰来县| 琼结县| 喀喇沁旗| 贺兰县| 九龙坡区| 沙河市| 上林县| 筠连县| 霍山县| 广东省| 峨眉山市| 祁阳县| 开封市| 宿松县| 涞源县| 吴堡县| 娄底市| 鄂伦春自治旗| 阳信县| 曲靖市| 连州市| 余姚市| 温宿县| 大连市| 鹤壁市| 平乐县| 宁海县| 泸定县| 乃东县| 东乌|