1. 程式人生 > >Java語言中的方法引數——值傳遞與引用傳遞

Java語言中的方法引數——值傳遞與引用傳遞

Java語言中的方法引數有兩種:

1、基本資料型別(數字、布林值)

2、物件引用

基於方法引數的傳遞有兩種方式:值傳遞和引用傳遞

值傳遞表示方法接收的是呼叫者提供的值。

引用傳遞表示方法接收的是呼叫者提供的變數地址。

Java程式設計語言總是採用按值傳遞的方式,也就是說,方法得到的是所有引數值的一個拷貝,特別是方法不能修改傳遞個它的任何引數變數的內容。

先用基本資料型別作為引數來舉個栗子:

publicstaticvoid methodA(double i){

i = 3 * i;

System.out.println(i);

}

double i = 3.0;

methodA

(i);

System.out.println(i);

將 i 作為引數傳遞至methodA方法中,此時的 i 是作為引數值的一個拷貝,屬於值傳遞,那麼呼叫者和被呼叫者是兩個不同的變數,方法體裡面對變數的改變,不會影響方法體外面的變數。

如果將例項物件作為引數進行傳遞:

publicstaticvoid plus(carc){

     c.setPrice(c.getPrice() * 3);

}

car c = new car(3.0);

plus(c);

System.out.println(c.getPrice());

將car的例項物件c作為引數傳遞至plus方法中,此時的 c 物件是作為引數值的一個拷貝,屬於引用傳遞,那麼呼叫者和被呼叫者用的是相同的變數,如果在方法體內部對變數進行修改,會影響方法體外的變數。

那麼例項物件作為引數進行傳遞,就是屬於引用傳遞嗎?這裡可做一個反例來說明。

  public staticvoid changeName(carc){

c = new car();

c.setName("賓士");

}

    car c = new car();

    c.setName("奧迪");

    changeName(c);

    System.out.println(c.getName());

將例項物件car傳入changeName方法中,c作為拷貝物件進行傳遞,方法中對c例項再次進行例項化,並且賦予引數狀態,方法中的c物件更改屬性狀態,並不會影響方法外的c例項屬性,changeName方法結束後,方法中的c例項便會被廢棄掉,所以最終會輸出“奧迪”。

表明方法中如果物件作為引數的話,屬於值傳遞,並非引用傳遞。

總結:

方法不能修改一個基本型別的引數(即數值型和布林型)

方法可以改變一個物件引數的狀態

方法不能讓物件引數引用一個新的物件  

相關推薦

Java語言方法引數——傳遞引用傳遞

Java語言中的方法引數有兩種: 1、基本資料型別(數字、布林值) 2、物件引用 基於方法引數的傳遞有兩種方式:值傳遞和引用傳遞。 值傳遞表示方法接收的是呼叫者提供的值。 引用傳遞表示方法接收的是呼叫者提供的變數地址。 Java程式設計語言總是採用按值傳遞的方式,也就是說

Java語言傳遞引用傳遞

JAVA語言中的傳遞都是值傳遞嗎?有沒有引用傳遞呢?這是一個常常被討論的問題。開始以前首先來看下面的程式碼: public class TestParameter {  // 初始值為0  protected int num = 0;  // 為方法引數重新賦值  pub

JAVA引數傳遞方式 (按傳遞引用傳遞區別)

首先要明確的是JAVA中沒有引用傳遞, 全部是按值呼叫 令大家所費解的 當物件引用作為引數時  函式為什麼能修改真實的物件呢?這不是引用傳遞的特徵嗎? 尤其先學習C++再學習JAVA的同學(比如說我自己)會這樣認為, 用白話解釋就是: 引用傳遞指標時, 連函式操作的指

java基礎–(11)–關於Java傳遞引用傳遞

結論:Java中都是值傳遞,沒有“引用傳遞” (1)基本資料型別傳值,對形參的修改不會影響實參; (2)引用型別傳引用的值,形參和實參指向同一個記憶體地址(同一個物件),所以對引數的修改會影響到實際的物件; (3)String, Integer, Double等immutable的型別特殊處

Java傳遞引用傳遞

//Test.java public class Test { public static void main(String[] args) { Person ps =

java傳遞引用傳遞(隨筆)

       這裡複習一下Java的值傳遞與引用傳遞。        值傳遞(形式引數型別是基本資料型別):方法呼叫時,實際引數把它的值傳遞給對應的形式引數,形式引數只是用實際引數的值初始化自己的儲存單元內容,是

Java傳遞引用傳遞

首先解釋下值傳遞和引用傳遞: 值傳遞:傳遞的是值的拷貝,就是在方法呼叫的時候,實參是將自己的一份拷貝傳遞給形參,也就是說傳遞後實參與形參就互不相關了。在方法內,對該引數值的修改不影響原來實參。 引用傳

Java——傳遞引用傳遞

color 16px code mar 變量 參數傳遞 形參 函數 ava 1.基本類型和引用類型在內存中的保存 (1)基本類型的變量保存原始值,即它代表的值就是數值本身;    基本類型在聲明變量時就為它分配了空間;    基本類型在參數傳遞過程中屬於值傳遞,也就是復

C#傳遞引用傳遞的區別

以值傳遞引數 當實參當作值來傳遞時,就產生了一個新的拷貝。 class Test { static void Main(string[] args) { int x=8; Fo(x);

函式引數函式呼叫(徹底理解傳遞引用傳遞)

函式呼叫的作用: ·用實引數向形式引數傳遞資料; ·為獲得資料引數及在函式體中宣告的變數分配儲存空間; ·中斷現行(呼叫)函式,把流程向被呼叫函式的入口處,開始執行被調函式。當引數表為空時,表示該函式不從呼叫函式接受資料。 函式引數傳遞機制   堆疊儲存區是主調函式(過程)

傳遞引用傳遞

double 字符 浮點型 ima 原來 例子 布爾 println private 基本數據類型 (屬於值傳遞) 整型:byte,short,int,long 浮點型:float,double 字符型:char 布爾型:boolean 引用數據

面試再問傳遞引用傳遞,把這篇文章砸給他!

java的值傳遞和引用傳遞在面試中一般都會都被涉及到,今天我們就來聊聊這個問題,首先我們必須認識到這個問題一般是相對函式而言的,也就是java中的方法引數,那麼我們先來回顧一下在程式設計語言中有關引數傳遞給方法(或函式)的兩個專業術語: 按值呼叫(call by value)

ethereum(以太坊)(四)--傳遞引用傳遞

pragma solidity ^0.4.0; // priveta public internal contract Test{ uint public _age; function Test(uint age){ _age = age; }

javascript傳遞引用傳遞

javascript中,變數型別分為基本型別和物件型別,基本型別有以下幾種:string,number,boolean,null,undefined,物件型別就是object,object又分為object,array,function。基本型別是值傳遞,物件型別是引用傳遞。具體來說,就是基本型

C# 二十四、傳遞引用傳遞

值傳遞 使用值傳遞時,向形式引數傳遞的是實在引數的副本,方法內發生的對形式引數的更改對實在引數本身沒有任何影響。 程式碼示例: static void Main(string[] args) { int i =

C++物件賦C#物件賦----C++C#傳遞引用傳遞淺析

在C#中,看下面一段程式: class A     {         public int value;         public A(int x)         {             value = x;         }         public

PHP之傳遞引用傳遞

廢話不多說,直接上程式碼(值傳遞與引用傳遞的區別我在這就不介紹了,不懂得的小夥伴直接程式碼理解,還是不懂 -> 自行度娘): 普通變數: 值傳遞 <?php $a = 6; ec

java基本資料型別傳遞引用傳遞區別詳解

java的值傳遞和引用傳遞在面試中一般都會都被涉及到,今天我們就來聊聊這個問題,首先我們必須認識到這個問題一般是相對函式而言的,也就是java中的方法引數,那麼我們先來回顧一下在程式設計語言中有關引

java基本資料型別傳遞引用傳遞的區別詳解

本文轉自http://blog.csdn.net/javazejian/article/details/51192130 java的值傳遞和引用傳遞在面試中一般都會都被涉及到,今天我們就來聊聊這個問題,首先我們必須認識到這個問題一般是相對函式而言的,也就是java中的

PHP-變數(二)(變數值傳遞引用傳遞,及傳遞轉換成引用傳遞)

1. PHP 中的資料型別簡單介紹 在講解 值傳遞 和 引用傳遞 之前,先來了解下 php 中的資料型別 php 中的資料型別大體分為三類: ① 標量資料型別:字串型、整型、