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

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ù)類型細分小類可分為整數(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)文章

  • Java基礎(chǔ)異常處理代碼及原理解析

    Java基礎(chǔ)異常處理代碼及原理解析

    這篇文章主要介紹了java基礎(chǔ)異常處理代碼及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • springcloud + mybatis + seate集成示例

    springcloud + mybatis + seate集成示例

    本文主要介紹了springcloud + mybatis + seate集成示例,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • SpringBoot集成AOP的代碼示例

    SpringBoot集成AOP的代碼示例

    AOP是一種編程范式,它旨在將橫切關(guān)注點(cross-cutting concerns)從應(yīng)用程序的業(yè)務(wù)邏輯中分離出來,橫切關(guān)注點是那些在多個模塊中重復(fù)出現(xiàn)的功能,如日志記錄、性能監(jiān)控、事務(wù)管理、安全控制等,本文介紹了Spring Boot如何集成AOP,需要的朋友可以參考下
    2024-09-09
  • JDK數(shù)組阻塞隊列源碼深入分析總結(jié)

    JDK數(shù)組阻塞隊列源碼深入分析總結(jié)

    在這篇文章當(dāng)中,我們將通過源碼仔細為大家介紹一下JDK具體是如何實現(xiàn)數(shù)組阻塞隊列的,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08
  • Java中對象初始化順序的詳細介紹

    Java中對象初始化順序的詳細介紹

    在Java中,類裝載器把一個類裝入Java虛擬機中,要經(jīng)過三個步驟來完成:裝載、鏈接和初始化,網(wǎng)上關(guān)于Java中對象初始化順序的文章很多,這篇文章我們將詳細介紹Java中對象初始化順序。有需要的可以參考學(xué)習(xí)。
    2016-10-10
  • Spring+quartz實現(xiàn)定時發(fā)送郵件功能實例

    Spring+quartz實現(xiàn)定時發(fā)送郵件功能實例

    spring提供的定時發(fā)送郵件功能一直深受廣大web開發(fā)者的喜愛,這篇文章主要介紹了Spring+quartz實現(xiàn)定時發(fā)送郵件功能實例,有興趣的可以了解一下。
    2017-03-03
  • 一學(xué)即會之JDK版本快速切換方法(2024)

    一學(xué)即會之JDK版本快速切換方法(2024)

    這篇文章主要介紹了一學(xué)即會之JDK版本快速切換方法,詳細給大家講解了如何下載、安裝和配置多個JDK版本,并通過設(shè)置環(huán)境變量和編寫批處理腳本來切換JDK版本,需要的朋友可以參考下
    2025-03-03
  • spring boot idea maven依賴找不到問題處理方法

    spring boot idea maven依賴找不到問題處理方法

    這篇文章主要介紹了spring boot idea 偶爾maven依賴找不到問題,這里總結(jié)了幾種處理方法,方便嘗試排查,對spring boot idea  maven依賴找不到問題感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • Springboot使用influxDB時序數(shù)據(jù)庫的實現(xiàn)

    Springboot使用influxDB時序數(shù)據(jù)庫的實現(xiàn)

    項目中需要存放大量設(shè)備日志,且需要對其進行簡單的數(shù)據(jù)分析,信息提取工作,所以本文就介紹一下Springboot使用influxDB時序數(shù)據(jù)庫,感興趣的可以了解一下
    2021-08-08
  • 詳解如何用Java去除HTML標(biāo)簽

    詳解如何用Java去除HTML標(biāo)簽

    在平時工作中,偶爾會用 Java 做一些解析HTML的工作。有時需要刪除所有的HTML標(biāo)簽,只保留純文字內(nèi)容。這個問題在做過一些爬蟲工作的朋友來說很簡單。下面來說說,我們平時使用到的集中解析的方法
    2022-12-12

最新評論