自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java中參數傳遞類型只有值傳遞

開發(fā) 后端
以前學習C++時把參數傳遞分為值傳遞和引用傳遞,國內的不少java教材愿意把對象的傳遞理解是引用傳遞,為什么它們會這么說呢?下文將詳細說明。

Java核心技術卷I里有一個結論我覺得挺有意思的:java中沒有引用傳遞,只有值傳遞

首先看定義:

值傳遞,是指方法接收的是調用者提供的值

引用傳遞,是指方法接收的是調用者提供的變量地址

以前學習C++時把參數傳遞分為值傳遞和引用傳遞,國內的不少java教材愿意把對象的傳遞理解是引用傳遞,為什么它們會這么說呢?可以看下面一個例子:

  1. import java.util.Calendar;  
  2. public class ChangeValue {  
  3.     public static void main(String[] args) {  
  4.         Calendar oc = Calendar.getInstance();  
  5.         System.out.println("origin:"+oc.getTime());  
  6.         changeDate(oc);  
  7.         System.out.println("after:"+oc.getTime());        
  8.     }  
  9.       
  10.     static void changeDate(Calendar pd){  
  11.         pd.set(197011);  
  12.     }  

某時刻程序輸出:

origin:Thu Jan 05 21:15:59 CST 2012 
after:Sun Feb 01 21:15:59 CST 1970

oc對象的值改變了,很多人就認為java對象傳遞實際上是引用傳遞。

過程應該是這樣的:

運行changeDate這個函數時,方法得到的是對象引用的拷貝,oc和pd同時引用同一個對象,所以函數運行結束后,pd已經消失了,但是對引用對象的更改卻也影響了oc所引用的同一對象,結合對之前的定義理解,這應該是值傳遞的過程(傳遞的是對象引用的拷貝)。

以下附上另一個例子,兩個對象的交換函數(C++中可以輕易實現):

  1. public class Swap {  
  2.     public static void main(String[] args) {  
  3.         ObjectSample o1 = new ObjectSample("hello");  
  4.         ObjectSample o2 = new ObjectSample("你好");  
  5.         System.out.println("before swap o1:"+o1.getTitle()+" o2:"+o2.getTitle());  
  6.         Swap.swapObject(o1, o2);  
  7.         System.out.println("after swap o1:"+o1.getTitle()+" o2:"+o2.getTitle());  
  8.     }  
  9.     static void swapObject(ObjectSample o1, ObjectSample o2){  
  10.         ObjectSample temp = new ObjectSample("temp");  
  11.         temp = o1;  
  12.         o1 = o2;  
  13.         o2 = temp;  
  14.     }  
  15. }  
  16.  
  17. class ObjectSample{  
  18.     private String title;  
  19.       
  20.     ObjectSample(String title){  
  21.         this.title = title;  
  22.     }  
  23.       
  24.     public String getTitle(){  
  25.         return title;  
  26.     }  

輸出結果:

before swap o1:hello o2:你好 
after swap o1:hello o2:你好

java在交換程序中并沒有交換兩個對象的值,交換的是兩個對象的拷貝,不能實現讓對象參數引用一個新對象,究其原因還是因為java是采用了值傳遞而非引用傳遞。

還有不少和以前自己接觸的觀點不一樣的地方,當然需要借鑒的吸收并且經過自己的實踐來辨別。

原文鏈接:http://tjuking.iteye.com/blog/1405532

【編輯推薦】

  1. 利用Java進行MySql數據庫的導入和導出
  2. Java堆內存的10個要點
  3. Play!在云端:Java PaaS平臺入門
  4. Java generic中通配符的幾點理解
  5. Java中泛型創(chuàng)建數組的總結
責任編輯:林師授 來源: tjuking的博客
相關推薦

2015-09-08 10:16:41

Java參數按值傳遞

2020-10-24 15:50:54

Java值傳遞代碼

2022-07-29 08:05:31

Java值傳遞

2017-12-05 08:53:20

Golang參數傳遞

2009-08-17 14:48:44

Java參數傳遞機制

2016-09-18 19:07:33

Java值傳遞引用傳遞

2023-11-15 09:14:27

Java值傳遞

2011-03-25 13:44:28

Java值傳遞

2025-02-12 10:51:51

2024-09-04 01:36:51

Java對象傳遞

2009-10-16 13:08:40

VB自定義類型參數

2020-09-02 08:00:51

Java引用傳遞值傳遞

2009-08-06 16:32:49

SQL Server

2022-11-02 15:00:03

Java值傳遞引用傳遞

2024-04-28 11:36:07

LambdaPython函數

2010-09-10 09:55:13

SQL參數變量

2023-03-29 23:23:00

MyBatis參數框架

2023-11-17 14:10:08

C++函數

2024-09-19 20:59:49

2025-01-17 10:52:26

定義函數編程Python
點贊
收藏

51CTO技術棧公眾號