Java語言中的方法引數——值傳遞與引用傳遞
Java語言中的方法引數有兩種:
1、基本資料型別(數字、布林值)
2、物件引用
基於方法引數的傳遞有兩種方式:值傳遞和引用傳遞。
值傳遞表示方法接收的是呼叫者提供的值。
引用傳遞表示方法接收的是呼叫者提供的變數地址。
Java程式設計語言總是採用按值傳遞的方式,也就是說,方法得到的是所有引數值的一個拷貝,特別是方法不能修改傳遞個它的任何引數變數的內容。
先用基本資料型別作為引數來舉個栗子:
publicstaticvoid methodA(double i){
i = 3 * i;
System.out.println(i);
}
double i = 3.0;
methodA
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 中的資料型別大體分為三類: ① 標量資料型別:字串型、整型、