1樓:育知同創教育
1.基本型別和引用型別在記憶體中的儲存
java中資料型別分為兩大類,基本型別和物件型別。相應的,變數也有兩種型別:基本型別和引用型別。
基本型別的變數儲存原始值,即它代表的值就是數值本身;
而引用型別的變數儲存引用值,"引用值"指向記憶體空間的位址,代表了某個物件的引用,而不是物件本身,
物件本身存放在這個引用值所表示的位址的位置。
基本型別包括:byte,short,int,long,char,float,double,boolean,returnaddress,
引用型別包括:類型別,介面型別和陣列。
相應的,變數也有兩種型別:基本型別和引用型別。
2.變數的基本型別和引用型別的區別
基本資料型別在宣告時系統就給它分配空間:12
int a;
a=10;//正確,因為宣告a時就分配了空間
引用則不同,它宣告時只給變數分配了引用空間,而不分配資料空間:12
3456
7date date;
//執行例項化,開闢資料空間存放date物件,然後把空間的首位址傳給today變數
//date=new date();
//如果註釋掉上一步操作
//the local variable date may not have been initialized
//也就是說物件的資料空間沒有分配
date.getdate();
看一下下面的初始化過程,注意"引用"也是佔用空間的,乙個空object物件的引用大小大概是4byte:12
3date a,b; //在記憶體開闢兩個引用空間
a = new date();//開闢儲存date物件的資料空間,並把該空間的首位址賦給a
b = a; //將a儲存空間中的位址寫到b的儲存空間中
3.引用傳遞和值傳遞
這裡要用實際引數和形式引數的概念來幫助理解,
值傳遞:
方法呼叫時,實際引數把它的值傳遞給對應的形式引數,函式接收的是原始值的乙個copy,此時記憶體中存在兩個相等的基本型別,即實際引數和形式引數,後面方法中的操作都是對形參這個值的修改,不影響實際引數的值。
引用傳遞:
也稱為傳位址。方法呼叫時,實際引數的引用(位址,而不是引數的值)被傳遞給方法中相對應的形式引數,函式接收的是原始值的記憶體位址;
在方法執行中,形參和實參內容相同,指向同一塊記憶體位址,方法執行中對引用的操作將會影響到實際物件。
引用型別傳遞與值傳遞,什麼是值傳遞和引用傳遞
在c 中,有兩種型別 引用型別 如 string 和非引用型別 如 int 引用型別指向的其實是乙個記憶體位址,string 雖然是引用型別 不過是不可變的。對字串做一些操作 比如大小寫的轉換 實際上是重新建立了乙個字串。這也是為什麼在做大量字串拼接的時候要使用stringbuilder 而不用 如...
java中向方法傳遞物件引用變數是按值傳遞其中
傳值傳引用都不夠準確,可以理解成傳引用變數的副本值。引用變數分為字面值引用變數 即基本資料型別引用變數 和物件引用變數 詳情需要了解資料型別使用機制和堆疊的概念 物件引用變數 即普通java物件的引用變數 如 string a abc a就是物件引用變數。java 是不能直接操作物件的,只能通過對 ...
python 物件通過引用傳遞的問題
python的變數都是物件的引用 象賦值操作,如果等號右側是字面表示式,那麼會建立乙個新物件,因此b指向的是13這個新物件,而不是修改儲存值12的舊物件。而且數字,字串,元組這些屬於不能本地修改的物件如s hello world s 0 h 這樣的語句會報錯。python 是值傳遞還是引用傳遞 知乎...