1. 程式人生 > >java方法引數傳值

java方法引數傳值

傳值還是傳引用是Java中很基礎的一個問題,也是筆試的時候經常被考察的一個問題,總結一下。


題目1: 寫出以下程式的輸出內容。


按 Ctrl+C 複製程式碼


public class Test {


public static void changeValue(int value){
value = 0;
}


public static void main(String[] args) {
int value = 2010;
changeValue(value);
System.out.println(value);
}
}
按 Ctrl+C 複製程式碼
 


求輸出結果。


答案:


2010
這個題目考察了java方法的引數傳遞問題。java中方法的引數傳遞為值傳遞,不管這個引數是基本型別還是引用型別,我們傳遞過去的都是該值的一個副本,這個副本作為方法的區域性變數儲存在棧(stack)中。


對於上面的 changeValue() 方法,傳遞進來的是變數 value 的一個副本,在 changeValue() 方法中修改的只是該方法的一個區域性變數,不會影響作為引數傳進來的那個變數,兩者井水不犯河水。


題目2: 寫出以下程式的輸出內容。


複製程式碼
public class Test {


public static void changList(List list){
list.add("bbb");
}


public static void main(String[] args) {
List list = new ArrayList();
list.add("aaa");
changList(list);
System.out.println(list.size());
}


}
複製程式碼
 


答案:


2
說明:
main()方法在呼叫changeList()方法的時候,changList()方法中的list變數是main()方法list變數的副本,這兩個list變數都指向heap中的同一ArrayList物件,因此操作的也是同一物件。


題目3:寫出以下程式的輸出內容。


複製程式碼
public class Test {


public static void changString(String str){
str = str + "bbb";
}


public static void main(String[] args) {
String str = "aaa";
changeString(str);
System.out.println(str);
}


}
複製程式碼
 


答案:


aaa
說明:
changString()方法僅僅使本地變數str指向了一個全新的字串物件”aaabbb”,對main()方法中的str變數沒有任何影響。


對java方法引數傳遞的總結:


基礎資料型別(int,char,……)傳值,物件型別(Object,陣列,容器……)傳引用。


有說java方法引數都是傳值的,理解方式不同而已。引用本身也是值(物件地址)。


傳值方式,傳遞的是值的副本。方法中對副本的修改,不會影響到呼叫方。


傳引用方式,傳遞的是引用的副本。此時,形參和實參指向同一個記憶體地址。對引用副本所指向的物件的修改,如修改物件屬性、容器內容等,會影響到呼叫方。對引用副本本身(物件地址)的修改,如設定為null,重新指向其他物件,不會影響到呼叫方。


只要知道傳引用時,也是傳遞的引用的副本,就比較容易理解了。

相關推薦

java方法數傳

傳值還是傳引用是Java中很基礎的一個問題,也是筆試的時候經常被考察的一個問題,總結一下。題目1: 寫出以下程式的輸出內容。按 Ctrl+C 複製程式碼public class Test {public static void changeValue(int value){v

java中包的理解,普通類、抽象類、介面作為方法數傳情況,作為返回的傳遞情況。

一、包的概念 用於存放類檔案,包含原始檔還有.class檔案。通過包的分類管理讓功能相同的類放在一個資料夾裡。作用:為類檔案進行分類管理。 二、包的宣告格式 通常使用公司網址反寫。包名全部採用小寫字母。多層包用.連線。包的宣告必須在有效程式碼的第一行。 導包: impo

【第8天】Java方法過載、方法重寫(覆蓋)、構造方法數傳

1 方法過載(overload) 2 方法重寫(覆蓋)(override) 3 構造方法 4 引數傳值 1 方法過載(overload) 方法過載的作用? 同時滿足使用者的不同需求。 同一個方法,使用者可以傳入不同

Java的知識點10——static關鍵字、靜態初始化塊、 數傳機制、包、匯入類import、 靜態匯入

static 關鍵字 在類中,用static宣告的成員變數為靜態成員變數,也稱為類變數。 類變數的生命週期和類相同,在整個應用程式執行期間都有效。它有如下特點:   1. 為該類的公用變數,屬於類,被該類的所有例項共享,在類被載入時被顯式初始化。   2. 對於該類的所

JAVA學習筆記 數傳機制

一。程式碼 public class user3 {int id;String name;String pass;static String company;public user3(int id,String name){ this.id=id; this.name=name;}public v

JAVA數傳

//新建一個類,命名為Calc package com.zlm; public class Calc { //構造一個方法,方法名為add void add(int x){ //定義了一個int型別的引數x x += 1; //表示x = x + 1

Java技術——Java中的數傳方式

1.  你覺得下面程式會輸出什麼publicstaticvoid change(String s) {         s = “123”;    }     publicstaticvoid main(String args[]) {         String s = 

基本型別數傳(持續整理中)

一 、值傳遞 測試: 分析: 值傳遞的過程中會給形參分配一個同等型別的記憶體空間,將實參的內容深拷貝到為該形參分配的記憶體空間中,後續都是對形參的這塊空間進行操作,對實參的記憶體空間沒有影響; 二 、引用傳值 測試: 分析: 引用傳值,在函式中不用重新分配一個型別空間,形

React Link 帶數傳

2018年11月09日 13:23:32 obf13 閱讀數:12 標籤: React 傳參

JavaScript各種定向攜帶數傳問題。(window.location.href)

帶變數 string id = Request.QueryString["id"].ToString(); Response.Write("<script>alert('成功');window.location.href('reply.aspx?word_id=

thinkphp中的url數傳問題

<?php namespace app\index\controller; class Index{ public function index(){ return

用指標作為數傳是不是更節省記憶體?(c/c++/golang)

不一定。 當引數傳入到函式中時,函式會在棧空間中,為函式引數開闢對應的記憶體。 如果傳入的是指標,那麼系統會為該引數分配指標型別大小的空間,比如32位機就是4個位元組。 而傳入的變數,分配空間大小就是實際佔用的大小。比如char就是1個位元組,short就是2個位元組,double就是8個位元組等。

iOS巔峰之兩個App之間相互呼叫並攜帶數傳

1、新建兩個專案:AppOne,AppTwo; 2、分別在其屬性列表中新增如下: AppOne:   AppTwo: AppOne的 viewController.m 中新增程式碼: - (void) touchesBegan:(NSSet *)

java方法間傳方式

以前看一道面試題說: java的傳值方式只能是值傳遞,不會傳遞引用。 後來和朋友討論題目時遇到傳遞的是基本資料型別和非基本資料型別時存在差別。 引數為基本資料型別: public void swap(StringBuffer a, StringBuffer b) {

javascript中函式字元數傳報錯

<button class="btn btn-dangerous btn-mini" type="button" onclick="deleteById(${stu.id })">刪除&

powershell指令碼,命令列數傳,並繫結變數的例子

        這是小技巧文章,所以文章不長。但原創唯一,非常重要。我搜了下,還真沒有人發 powershell怎樣 【命令列 引數 繫結】,所以我決定寫成部落格。 搜尋關鍵字如下: powershell 命令列 引數 繫結 powershell 傳入 引數 powershell 傳遞 引數 p

asp.net中URL數傳中文亂碼的三種解決辦法

一般來說。設定web.config檔案就可以了。但是如果你用 JavaScript 呼叫 webservice 方法的話(往webservice裡面傳遞中文引數)。設定 web.config 檔案好象無效。 (adsbygoogle = window.adsbygoogle |

用Ajax 進行Post多數傳

用Ajax 進行Post傳值 以下程式已除錯通過: <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled D

java中函數傳與引用問題

輸出 set 驗證 臨時對象 輸出結果 引用 chan sta 賦值運算 從C++轉java,在使用函數傳對象時,碰到一點問題,今天特意驗證了一下: public class App { public static void doubleTest(double

C# asp.net頁面通過URL數傳中文亂碼問題解決辦法

1.編碼string state=Server.UrlEncode(stateName.Text.Trim()); Response.Redirect("aaa.aspx?state="+state+""); 2.解碼(aaa.aspx) string state= Ser