❶ java中的值傳遞和引用傳遞的區別
值傳遞和引用傳遞是c中的概念,在java中可以用於方便理解,但是java中是值傳遞的。說說區別吧,昨天剛好看見這個問題。8個基本數據類型是值傳遞,即方法內對其修改是不會改變實參的,其他引用類型(除了string)可以理解為引用傳遞,傳進方法內部的是一個地址,可以理解為房子的鑰匙,你有了鑰匙,照樣可以對房子進行改變,是吧。那為什麼string不行呢?因為string是不可改變的,雖然它也是傳了地址,但已經是第二個引用(b)了 ,當你對形參進行改變,這時候b會指向新的string對象。這時候原來的引用a是沒有改變的,還是指向第一個對象。
不懂可以追問,共同學習
❷ 如何區分Java中的值傳遞和引用傳遞
引用傳遞的是對象的地址,值傳遞的是變數的值
使用引用傳遞,被調用函數使用的是調用函數傳入的對象本身,也就是說在被調用函數中對對象進行修改將直接導致外部對象的值被修改。
而值傳遞,傳遞進去的是變數的副本(即拷貝),此時在被調用函數中對形參的任何修改都不會改變外部變數的值。
引用你可以直接理解成對象的別名。例如有有函數Test(String str);對象String name;
調用Test:Test(name);
則在Test裡面str其實是name外部變數的別名,他們所代表的是同一個對象,所以Test函數修改str即修改name
❸ java對象引用傳遞問題看這個程序
樓主先看看這段簡潔版的代碼:
class Person{ // 定義Person類
private Book book ; // 一個人有一本書
public void setBook(Book b){
book = b ;
book.setTitle("caca");
}
public Book getBook(){
return book ;
}
};
class Book{ // 定義Book類
private String title ; // 標題
public Book(String title) {
this.title = title;
}
public void setTitle(String t){
title = t ;
}
public String getTitle(){
return title ;
}
};
public class Test2{
public static void main(String arg[]){
Book book = new Book("hello");
Person person = new Person();
System.out.println("book.getTitle()---" + book.getTitle());
person.setBook(book);
System.out.println("person.getBook().getTitle()---" + person.getBook().getTitle());
System.out.println("book.getTitle()---" + book.getTitle());
System.out.println();
}
};
你的代碼太長了,主要就是看上面這幾行。理解我下面說的話,差不多就都理解了。
這里的輸出結果是:
book.getTitle()---hello
person.getBook().getTitle()---caca
book.getTitle()---caca
為什麼book.getTitle()前後的值不一樣呢?
因為,setBook(book)方法中傳遞的實際上是一個指針,是對名字為」hello「的書的引用。person接收到這個引用之後,又對book里的名字賦值,更改為」caca"。最後,執行book.getTitle()時,
又是同一個引用。注意的是,從始至終,就只有一個真正的book,其他的都是對這個book的引用。因為,你只new了一個。
❹ Java中什麼是值傳遞什麼又是引用傳遞
值傳遞是:如int ,float,char,String,Double等,傳遞的是具體的數值
引用傳遞:傳遞的是 對象的使用權,如 數組,介面,對象
❺ JAVA中引用對象的傳遞是值傳遞還是引用傳遞的問題
各種說法,其實java從本質上來講參數傳遞都是值傳遞,如果傳的是對象,虛擬機會在棧上開辟出一塊新的地址,然後指向傳遞過來的參數在堆中的內存地址,而不是直接引用棧上的地址,所以就算是參數傳遞,也只是傳遞了內存地址而已,如果傳遞過來的參數改變了指向的內存地址,那麼不會對原來的對象造成任何影響。
❻ 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;
無效。