存儲類型默認分配
① 51單片機定義變數時默認是存儲到哪裡的
未顯式聲明的情況下,變數會根據Memory Model的設置,默認分配在指定的存儲區。
Small模式:默認分配在data區
Compact模式:默認分配在pdata區
Large模式:默認分配在xdata區
新建工程默認都是Small模式,所以未顯式聲明存儲區域的變數都會分配在data區的。所以才會容易出現data區擠爆、編譯器跳著腳讓你把變數分到idata區去……
② Java基本數據類型
一、基本數據類型:
byte:Java中最小的數據類型,在內存中佔8位(bit),即1個位元組,取值范圍-128~127,默認值0
short:短整型,在內存中佔16位,即2個位元組,取值范圍-32768~32717,默認值0
int:整型,用於存儲整數,在內在中佔32位,即4個位元組,取值范圍-2147483648~2147483647,默認值0
long:長整型,在內存中佔64位,即8個位元組-2^63~2^63-1,默認值0L
float:浮點型,在內存中佔32位,即4個位元組,用於存儲帶小數點的數字(與double的區別在於float類型有效小數點只有6~7位),默認值0
double:雙精度浮點型,用於存儲帶有小數點的數字,在內存中佔64位,即8個位元組,默認值0
char:字元型,用於存儲單個字元,佔16位,即2個位元組,取值范圍0~65535,默認值為空
boolean:布爾類型,佔1個位元組,用於判斷真或假(僅有兩個值,即true、false),默認值false
二、Java數據類型基本概念:
數據類型在計算機語言裡面,是對內存位置的一個抽象表達方式,可以理解為針對內存的一種抽象的表達方式。接觸每種語言的時候,都會存在數據類型的認識,有復雜的、簡單的,各種數據類型都需要在學習初期去了解,Java是強類型語言,所以Java對於數據類型的規范會相對嚴格。數據類型是語言的抽象原子概念,可以說是語言中最基本的單元定義,在Java裡面,本質上講將數據類型分為兩種:基本類型和引用數據類型。
基本類型:簡單數據類型是不能簡化的、內置的數據類型、由編程語言本身定義,它表示了真實的數字、字元和整數。
引用數據類型:Java語言本身不支持C++中的結構(struct)或聯合(union)數據類型,它的復合數據類型一般都是通過類或介面進行構造,類提供了捆綁數據和方法的方式,同時可以針對程序外部進行信息隱藏。
三、Java中的數據類型與內存的關系
在Java中,每個存放數據的變數都是有類型的,如:
charch;floatx;inta,b,c;
ch是字元型的,就會分配到2個位元組內存。不同類型的變數在內存中分配的位元組數不同,同時存儲方式也是不同的。
所以給變數賦值前需要先確定變數的類型,確定了變數的類型,即確定了數據需分配內存空間的大小,數據在內存的存儲方式。
四、Java數據類型在內存中的存儲:
1)基本數據類型的存儲原理:所有的簡單數據類型不存在「引用」的概念,基本數據類型都是直接存儲在內存中的內存棧上的,數據本身的值就是存儲在棧空間裡面,而Java語言裡面八種數據類型是這種存儲模型;
2)引用類型的存儲原理:引用類型繼承於Object類(也是引用類型)都是按照Java裡面存儲對象的內存模型來進行數據存儲的,使用Java內存堆和內存棧來進行這種類型的數據存儲,簡單地講,回龍觀北大青鳥認為「引用」是存儲在有序的內存棧上的,而對象本身的值存儲在內存堆上的。
③ int和Integer范圍 int和integer
int和Integer的范圍:
int的范圍:
- 簡介:int是Java提供的8種原始數據類型之一,用於存儲整數值。
- 范圍:int類型在Java中佔4個位元組(32位),其取值范圍是-2^31到2^31-1,即-2147483648到2147483647。
- 默認值:int類型的默認值是0。
Integer的范圍:
- 簡介:Integer是Java為int類型提供的封裝類,屬於引用數據類型。它擴展了int類型,並定義了許多轉換方法。
- 范圍:從數值范圍的角度看,Integer封裝了int類型的值,因此其數值范圍與int相同,即-2^31到2^31-1。但需要注意的是,Integer作為對象,其「范圍」還涉及到對象的創建、比較、內存分配等方面。
- 默認值:Integer類型的默認值是null,表示未初始化或未指向任何Integer對象。
- 內存佔用:雖然Integer對象本身佔用的內存不止4個位元組(因為還包括對象頭和可能的對齊填充等),但用於存儲int值的部分仍然是4個位元組。Integer對象佔用的總內存大小取決於JVM的實現和對象的內部狀態。
int與Integer的主要區別:
- 類型:int是基本數據類型,直接存儲數值;Integer是引用數據類型,用引用指向對象。
- 默認值:int的默認值是0;Integer的默認值是null。
- 存儲原理:int是值傳遞,存儲在棧中,數據不可變;Integer是引用傳遞,存儲在堆中,引用指向的內存地址中的數據可以變化,但棧中的引用不變。
- 內存分配:聲明為int的變數不需要實例化,直接分配內存;聲明為Integer的變數需要實例化,使用new為其分配內存。
總結:int和Integer在數值范圍上是一致的,都表示-2^31到2^31-1的整數。但它們在類型、默認值、存儲原理、內存分配等方面存在顯著區別。int是基本數據類型,直接存儲數值,適用於高效的數值計算;而Integer是引用數據類型,提供了更多的面向對象特性和方法,適用於需要封裝和轉換的場景。