成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
以前學習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中泛型創建數組的總結
責任編輯:林師授 來源: tjuking的博客
相關推薦

2015-09-08 10:16:41

Java參數按值傳遞

2017-12-05 08:53:20

Golang參數傳遞

2020-10-24 15:50:54

Java值傳遞代碼

2022-07-29 08:05:31

Java值傳遞

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引用傳遞值傳遞

2024-04-28 11:36:07

LambdaPython函數

2023-03-29 23:23:00

MyBatis參數框架

2022-11-02 15:00:03

Java值傳遞引用傳遞

2009-08-06 16:32:49

SQL Server

2010-09-10 09:55:13

SQL參數變量

2024-09-19 20:59:49

2023-11-17 14:10:08

C++函數

2025-01-17 10:52:26

定義函數編程Python
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久国产 | 欧美精品一二三区 | 国产成人免费视频网站高清观看视频 | 欧美自拍第一页 | 一区二区三区四区国产精品 | 日韩视频91 | v亚洲| 中文精品视频 | 欧洲性生活视频 | 久久精片 | 欧美精品一区三区 | 91网站在线播放 | 成年人网站免费视频 | 国产欧美精品区一区二区三区 | 日韩在线视频一区 | 日韩一区中文字幕 | 国产精品亚洲一区二区三区在线观看 | 国产精品久久久久久久久久尿 | 国产高清在线 | www.一区二区三区 | 免费一级做a爰片久久毛片潮喷 | 国产 日韩 欧美 在线 | 久久综合一区 | 欧美一区二区三区在线 | 成人免费视频一区二区 | 日本中文字幕视频 | 日韩第一页| 久久99国产精一区二区三区 | 亚洲欧美激情精品一区二区 | 欧美日韩一区二区三区四区 | 超碰97在线免费 | 国产91视频免费 | 激情综合五月天 | 日韩第一页 | 中文字幕日韩欧美一区二区三区 | 成人国内精品久久久久一区 | 国产福利在线小视频 | 综合色导航 | 一级黄色片一级黄色片 | 国产精品日韩在线 | 成人欧美一区二区三区黑人孕妇 |