當前位置:首頁 » 編程語言 » java參數傳遞引用

java參數傳遞引用

發布時間: 2023-05-18 08:35:36

java 引用傳遞,參數傳遞;

對你的代碼加了注釋和修改,如下:

classDemo1{
intx;

publicstaticvoidmain(String[]args){
Demo1obj=newDemo1();//這里你原來的newDeom1(),錯誤,已改正
obj.x=5;//是通過對象操縱變數,即我先實例化了一個Demo1對象,名字是obj
//現在是訪問對象obj的x屬性,給它賦值obj.x=5;
change(obj);
System.out.println(obj.x);//輸出也改了
//由於傳的是對象引用,所有經過change後,obj對畝罩象的x屬性已經被修改,輸出3
}

publicstaticvoidchange(Demo1obj1){//這里你原來的(demo1obj),錯鉛耐殲誤,已改正,參數應該是(類名變數名槐沖)
//把變數名改成了obj1,方便理解
//在方法change里,對如參obj1的x屬性賦值
obj1.x=3;
}
}

⑵ 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 string怎麼傳引用傳遞

你是C/C++或是VB轉過來的嗎?在Java中過多考慮引用(指針)和值之間的關系是步入歧途,這正是Java的設計者極力避免你考慮的問題。
你需要明白的是:
1、Java中所有方法的參數的傳遞都是「值傳遞」;
2、Java中所有對象類型的變數的「值」,本質上說,包含了Java堆中的實際對象的地址,你可以大體認為Java的變數對應了C/C++中的指針(其實這裡面有更復雜的機制)。事實上,Java並不像C/C++一樣明確的區分「值語義」與「引用語義」,Java棧中也不會存放任何對象的實體(這點與C/C++不同,C/C++棧中可以存放對象實體),所有的Java對象都是在堆中。

概念上的區別在於,我這里提到的「變數」是指Java棧中的內容,對應你說的「引用」;我提到的「對象」是指Java堆中的實體,對應廳巧返你說的「值」。而一般Java教材中提到的「值傳遞」,是指這些「變數」的內容的傳遞,不是Java堆中的對象實體的傳遞。

你用字元串來做實驗,並推廣為所有Java對象的做法,並不是特別合適。Java的String類型有特殊的處理:所有編譯期認識的字元串,都會被放到常量池,於是下面的語句:
a = "s";
b = "s";
a和b並不像其它對象一樣有創建的動作,都是直接指向常量池中的"s",所以你可以得到a==b。而下面的語句:
a = new String("s");
b = new String("s");
是分別在Java堆中創建了2個對象,此時a!=b。

本質上說,對於基本數據類型(整數、字元等),Java的符號==,用於判斷二者的值是否相等;對於對象類型,Java的符號==,用於判斷兩個變數是否是「同一個對象」,equals()方法才是用於判斷兩個對象是扮飢否相等。

你希望實現的swap邏輯,在Java中通常認為是無法實現的。拿你這個例子來說,swapValue()中的tmpValue無論怎麼更改,只是改變tmpValue自己的內容(即不斷指向不同的對象),並不會改變value中的內容(始終指向同一個對象)。這也是為什麼Java最初說自己永遠是值傳遞。你只有改變tmpValue指向的寬中對象的值(通過調用這個對象的方法或是更改它的屬性),使用value訪問時,才能看到這些改變。

為了彌補這個缺陷,C#才加入了ref關鍵字,允許傳入變數的引用(如果參考C/C++,C#傳遞的實際是二級指針,它的內容是棧中的變數的地址)。

⑷ 誰知道Java中參數是引用傳遞還是值傳遞

java中方法參數傳遞方式是按值傳遞。所謂值傳遞,就是將實際參數值的副本(復製品)傳入方法內,而自己本身不會受到任何影響。
如果參數是基本類型,傳遞的是基本類型的字面量值的拷貝。

⑸ java中參數傳遞,按引用傳遞

Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。另外,Java 還為每個原始類型提供了封裝類(Wrapper)。如果需要一個整型變數,是使用基本的 int 型呢,還是使用 Integer 類的一個對象呢?如果需要聲明一個布爾類型,是使用基本的 boolean,還是使用 Boolean 類的一個對象呢?本文可幫助您作出決定。

下表列出了原始類型以及它們的對象封裝類。

原始類型 封裝類
=================
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double

引用類型和原始類型的行為完全不同,並且它們具有不同的語義。例如,假定一個方法中有兩個局部變數,一個變數為 int 原始類型,另一個變數是對一個 Integer 對象的對象引用:

int i = 5; // 原始類型
Integer j = new Integer(10); // 對象引用

這兩個變數都存儲在局部變數表中,並且都是在 Java 操作數堆棧中操作的,但對它們的表示卻完全不同。(本文中以下部分將用通用術語堆棧代替操作數堆棧或局部變數表。)原始埋碰類型 int 和對象引用各占堆棧的 32 位。(要表示一個 int 或一個對象引用,Java 虛擬機實現至少需要使用襲液猜 32 位存儲。)Integer 對象的堆棧項並不是對象本身,而是一個對象引用。

Java 中的所有對象都要通過對象引用訪問。對象引用是指向對象存儲所在堆中的某個區域的指針。當聲明一個原始類型時,就為類型本身聲明了存儲。前面的兩行代碼表示如下:

引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類拍型型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的預設值。對象引用實例變數的預設值為 null,而原始類型實例變數的預設值與它們的類型有關。

許多程序的代碼將同時包含原始類型以及它們的對象封裝。當檢查它們是否相等時,同時使用這兩種類型並了解它們如何正確相互作用和共存將成為問題。程序員必須了解這兩種類型是如何工作和相互作用的,以避免代碼出錯。

例如,不能對原始類型調用方法,但可以對對象調用方法:

int j = 5;
j.hashCode(); // 錯誤
//...
Integer i = new Integer(5);
i.hashCode(); // 正確

使用原始類型無須調用 new,也無須創建對象。這節省了時間和空間。混合使用原始類型和對象也可能導致與賦值有關的意外結果。看起來沒有錯誤的代碼可能無法完成您希望做的工作。例如:

import java.awt.Point;

class Assign
{
public static void main(String args[])
{
int a = 1;
int b = 2;
Point x = new Point(0,0);
Point y = new Point(1,1); //1
System.out.println("a is " + a);
System.out.println("b is " + b);
System.out.println("x is " + x);
System.out.println("y is " + y);
System.out.println("Performing assignment and " +
"setLocation...");
a = b;
a++;
x = y; //2
x.setLocation(5,5); //3

System.out.println("a is "+a);
System.out.println("b is "+b);
System.out.println("x is "+x);
System.out.println("y is "+y);
}
}

這段代碼生成以下輸出:

a is 1
b is 2
x is java.awt.Point[x=0,y=0]
y is java.awt.Point[x=1,y=1]
Performing assignment and setLocation...
a is 3
b is 2
x is java.awt.Point[x=5,y=5]
y is java.awt.Point[x=5,y=5]

修改整數 a 和 b 的結果沒什麼意外的地方。b 的值被賦予整型變數 a,結果 a 的值增加了 1。這一輸出反映了我們希望發生的情況。但是,令人感到意外的,是在賦值並調用 setLocation之後 x 和 y 對象的輸出。我們在完成 x = y 賦值之後特意對 x 調用了 setLocation,x 和 y 的值怎麼會相同呢?我們畢竟將 y 賦予 x,然後更改了 x,這與我們對整數 a 和 b 進行的操作沒什麼不同。

這種混淆是由原始類型和對象的使用造成的。賦值對這兩種類型所起的作用沒什麼不同。但它可能看起來所有不同。賦值使等號 (=) 左邊的值等於右邊的值。這一點對於原始類型(如前面的 int a 和 b)是顯而易見的。對於非原始類型(如 Point 對象),賦值修改的是對象引用,而不是對象本身。因此,在語句

x = y;

之後,x 等於 y。換句話說,因為 x 和 y 是對象引用,它們現在引用同一個對象。因此,對 x 所作的任何更改也會更改 y。下面是 //1 處的代碼執行以後的情況:

執行 //2 處的賦值以後情況如下:

當在 //3 處調用 setLocation 時,這一方法是對 x 引用的對象執行的。因為 x 引用的 Point 對象也正是 y 所引用的對象,所以我們現在得到以下結果:

因為 x 和 y 引用同一個對象,所以對 x 執行的所有方法與對 y 執行的方法都作用於同一個對象。

區分引用類型和原始類型並理解引用的語義是很重要的。若做不到這一點,則會使編寫的代碼無法完成預定工作。

⑹ Java中參數傳遞有沒有引用傳遞

Java只有一種參數傳遞方式:值傳遞!
真正的引用傳遞(pass by reference)是指當引元傳遞給函數時,被賀臘派調用的函數獲得的是對原值的引用,而非原值的副本。如果函數修改了參數值禪賀,那麼調用代碼中的值也會改變,那是因為引元和參數使用了內存中的同一塊地址。

1樓說的數組,傳遞的是數組的引用的拷貝,而不是數組的引用。
其他幾局凱位所說的「引用傳遞」實際上是指「傳遞了引用的拷貝」,所以歸根結底還是「值傳遞」。

⑺ java中繼承的數值傳遞引用

這個題目如下思路與實現

思路:

  1. 依照圓和圓柱的描述抽象成Java程序里的對象Cylinder與Circle,這也是Java的特點之一

  2. 圓與圓柱的關系:圓柱繼承圓

  3. 寫測試類TestCylinder

實現:

1.圓:

class Circle {
private double radius;// 半徑

// 構造方法半徑設為1
public Circle() {
super();
this.radius = 1.0;
}

// 設置半徑
public void setRadius(Double radius) {
this.radius = radius;
}

// 得到半徑
public Double getRadius() {
return radius;
}
}

2.圓柱


class Cylinder extends Circle {

private double length;

public Cylinder() {
super();
this.length = 1.0;
}

public void setLength(double length) {
this.length = length;
}

public double getLength() {
return length;
}

public double findVolume() {

return this.length * super.getRadius() * super.getRadius() * Math.PI;
}

}

3.測試


public class TestCylinder {

public static void main(String[] args) {

Cylinder cy = new Cylinder();//實例化一個圓柱

System.out.println(cy.findVolume());//因為length有默認值1,圓柱的父類圓具有半徑且初始值是1,此處,沒有主動給length和radius賦值,所以findVolume里使用的半徑與高都是1,所以體積是3.141592653589793

cy.setRadius(2.0);
cy.setLength(2.0);

System.out.println(cy.findVolume());//主動給半徑和高設置值,那麼cy的半徑與高的初始值就會被改變,結果就是2*2*2*PI

}

}



運行結果:

3.141592653589793
25.132741228718345

⑻ JAVA基礎問題,到底是值傳遞還是引用傳遞

java中方法參數傳遞方式是按值傳遞。所謂值傳遞,就是將實際參數值的副本(復製品)傳入方法內,而自己本身不會受到任何影響。
如果參數是基本類型,傳遞的是基本類型的字面量值的拷貝。

熱點內容
怎麼建立電腦配置文件 發布:2025-07-15 19:23:57 瀏覽:671
手機導航源碼下載 發布:2025-07-15 19:18:29 瀏覽:499
什麼是原生態安卓機 發布:2025-07-15 19:16:52 瀏覽:686
linux的安裝目錄在哪 發布:2025-07-15 19:10:04 瀏覽:724
2008編程入門經典 發布:2025-07-15 18:58:44 瀏覽:603
艾派密碼是什麼 發布:2025-07-15 18:47:40 瀏覽:588
密碼鎖如何在裡面開門 發布:2025-07-15 18:35:00 瀏覽:521
額溫演算法 發布:2025-07-15 18:18:14 瀏覽:728
ie客戶端事件腳本執行異常 發布:2025-07-15 18:10:13 瀏覽:26
自製壓縮兔糧 發布:2025-07-15 18:09:25 瀏覽:12