java值引用
⑴ java中什麼叫引用
1。首先,你要明白什麼是變數。變數的實質是一小塊內存單元。這一小塊內存里版存儲著變數的權值
比如int a = 1;
a就是變數的名名,1就是變數的值。
而當變數指向一個對象時,這個變數就被稱為引用變數
比如A a =new A();
a就是引用變數,它指向了一個A對象,也可以說它引用了一個A對象。我們通過操縱這個a來操作A對象。 此時,變數a的值為它所引用對象的地址
⑵ java類方法如何實現引用傳遞和值傳遞
參數是基本類型就是傳值,傳對象就是引用傳遞。
swap(Integer x, Integer y)可以傳遞引用,但是沒辦法實現交換。這跟Integer的實現方式有關。所以不是引用傳遞就一定能改變外面的值。
下面是引用傳遞,交換的情況,又臭又長。
classUntitled{
intneedFix;
publicstaticvoidswap(Untitledx,Untitledy){
inttemp=x.needFix;
x.needFix=y.needFix;
y.needFix=temp;
}
publicstaticvoidmain(String[]args){
Untitle1=newUntitled();
Untitle2=newUntitled();
u1.needFix=3;
u2.needFix=4;
swap(u1,u2);
System.out.println(u1.needFix+","+u2.needFix);
}
}
另外,你可以考慮一下引用傳遞,不過也是一種傳值,java裡面沒有事實上的指針。直接交換引用指向的對象是沒有作用的。
Untitledtemp=x;
x=y;
y=temp;
無效。
⑶ Java類是值傳遞還是引用傳遞
基本類型是值傳遞,
引用類型
可以看作是是
引用傳遞
.舉個簡單的例子吧
public
class
tt
{
public
static
void
change(int
a)
{
a=2;
}
public
static
void
change(int[]
A)
{
A[0]=2;
}
public
static
void
main(String[]
args)
{
int
b=1;
change(b);
System.out.println(b);//基本類型是
值傳遞
,所以b的值沒有改變
int[]
B={1};
change(B);
System.out.println(B[0]);//數組版,對象等引用類型是引用傳權遞,所以B的值發生改變
}
}
⑷ java值傳遞和引用傳遞的區別
1.基本類型和引用類型在內存中的保存
Java中數據類型分為兩大類,基本類型和對象類型。相應的,變數也有兩種類型:基本類型和引用類型。
基本類型的變數保存原始值,即它代表的值就是數值本身;
而引用類型的變數保存引用值,"引用值"指向內存空間的地址,代表了某個對象的引用,而不是對象本身,
對象本身存放在這個引用值所表示的地址的位置。
基本類型包括:byte,short,int,long,char,float,double,Boolean,returnAddress,
引用類型包括:類類型,介面類型和數組。
相應的,變數也有兩種類型:基本類型和引用類型。
2.變數的基本類型和引用類型的區別
基本數據類型在聲明時系統就給它分配空間:
1
2
int a;
a=10;//正確,因為聲明a時就分配了空間
引用則不同,它聲明時只給變數分配了引用空間,而不分配數據空間:
1
2
3
4
5
6
7
Date date;
//執行實例化,開辟數據空間存放Date對象,然後把空間的首地址傳給today變數
//date=new Date();
//如果注釋掉上一步操作
//The local variable date may not have been initialized
//也就是說對象的數據空間沒有分配
date.getDate();
看一下下面的初始化過程,注意"引用"也是佔用空間的,一個空Object對象的引用大小大概是4byte:
1
2
3
Date a,b; //在內存開辟兩個引用空間
a = new Date();//開辟存儲Date對象的數據空間,並把該空間的首地址賦給a
b = a; //將a存儲空間中的地址寫到b的存儲空間中
3.引用傳遞和值傳遞
這里要用實際參數和形式參數的概念來幫助理解,
值傳遞:
方法調用時,實際參數把它的值傳遞給對應的形式參數,函數接收的是原始值的一個,此時內存中存在兩個相等的基本類型,即實際參數和形式參數,後面方法中的操作都是對形參這個值的修改,不影響實際參數的值。
引用傳遞:
也稱為傳地址。方法調用時,實際參數的引用(地址,而不是參數的值)被傳遞給方法中相對應的形式參數,函數接收的是原始值的內存地址;
在方法執行中,形參和實參內容相同,指向同一塊內存地址,方法執行中對引用的操作將會影響到實際對象。
⑸ java 中的引用是什麼意思
1。首先,你要明白什麼是變數。變數的實質是一小塊內存單元。這一小塊內存里存儲著變回量的值
比如int a = 1;
a就是答變數的名名,1就是變數的值。
而當變數指向一個對象時,這個變數就被稱為引用變數
比如A a =new A();
a就是引用變數,它指向了一個A對象,也可以說它引用了一個A對象。我們通過操縱這個a來操作A對象。 此時,變數a的值為它所引用對象的地址
⑹ java中傳值和傳引用怎麼區別
傳值就是你改變這個值,不會改變原值。例如
int a=1;
把a作為參數經過方法調用,在方法中改變a的值如。
a=2;
在方法中a是變成2了。
但是在外面a還是1。.
如果是傳引用,值是會變的。
例如這樣
publicclassTest{
publicvoidtest(Listlist){
list.remove(0);
list.add("b");
}
publicstaticvoidmain(String[]args){
Stringa="123";
Listlist=newArrayList();
list.add(a);
newTest().test(list);
System.out.println(list.get(0));
}
}
⑺ java中的值傳遞和引用傳遞到底有什麼區別
java中在參數傳遞時有2種方式,兩者的區別:
1、按值傳遞:值傳遞是指在調用函數時將實際參數復制一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實際參數。簡單來說就是直接復制了一份數據過去,因為是直接復制,所以這種方式在傳遞時如果數據量非常大的話,運行效率自然就變低了,所以java在傳遞數據量很小的數據是值傳遞,比如java中的各種基本類型:int,float,double,boolean等類型的,具體可以自己測試。
有些文章中寫的是java中所有的傳參方式都是按值傳遞,這也說得通,無非就是文字游戲,因為無論是按值傳遞還是按引用傳遞都是把值傳遞過去了,所以就叫按值傳遞。
⑻ java引用變數的值是多少呢
System.out.println(rect1);
會自動調用父類object(所有類默認得父類)的tostring()方法,返回這個東西getClass().getName() + '@' + Integer.toHexString(hashCode()),類名加上hashcode碼的16進製表示版,所以他不會輸出內存地址權.具體怎麼得到地址我們老師說那玩意得不到,得到了也沒用,直接通過rect1調用它不就行了
⑼ java 值傳遞 引用傳遞
值傳遞:(形式參數類型是基本數據類型):方法調用時,實際參數把它的值傳遞給對應的形式參數,形式參數只是用實際參數的值初始化自己的存儲單元內容,是兩個不同的存儲單元,所以方法執行中形式參數值的改變不影響實際參數的值。
引用傳遞:(形式參數類型是引用數據類型參數):也稱為傳地址。方法調用時,實際參數是對象(或數組),這時實際參數與形式參數指向同一個地址,在方法執行中,對形式參數的操作實際上就是對實際參數的操作,這個結果在方法結束後被保留了下來,所以方法執行中形式參數的改變將會影響實際參數。
⑽ java中值傳遞跟引用傳遞
沒錯啊抄,java的非基本數據類襲型本質都是引用。a和x始終是指向同一個對象,而在「y=x」這一條賦值語句之前,和b指向同一個對象,賦值語句之後,y指向了x和a指向的對象,但不會帶動著b去指向該對象,也就是說b還是指向原先的對象,因為b並沒有被賦值,這一點好像和C中的引用不一樣的地方。