偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java中參數(shù)傳遞類型只有值傳遞

開(kāi)發(fā) 后端
以前學(xué)習(xí)C++時(shí)把參數(shù)傳遞分為值傳遞和引用傳遞,國(guó)內(nèi)的不少java教材愿意把對(duì)象的傳遞理解是引用傳遞,為什么它們會(huì)這么說(shuō)呢?下文將詳細(xì)說(shuō)明。

Java核心技術(shù)卷I里有一個(gè)結(jié)論我覺(jué)得挺有意思的:java中沒(méi)有引用傳遞,只有值傳遞

首先看定義:

值傳遞,是指方法接收的是調(diào)用者提供的值

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

以前學(xué)習(xí)C++時(shí)把參數(shù)傳遞分為值傳遞和引用傳遞,國(guó)內(nèi)的不少java教材愿意把對(duì)象的傳遞理解是引用傳遞,為什么它們會(huì)這么說(shuō)呢?可以看下面一個(gè)例子:

  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.     }  

某時(shí)刻程序輸出:

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

oc對(duì)象的值改變了,很多人就認(rèn)為java對(duì)象傳遞實(shí)際上是引用傳遞。

過(guò)程應(yīng)該是這樣的:

運(yùn)行changeDate這個(gè)函數(shù)時(shí),方法得到的是對(duì)象引用的拷貝,oc和pd同時(shí)引用同一個(gè)對(duì)象,所以函數(shù)運(yùn)行結(jié)束后,pd已經(jīng)消失了,但是對(duì)引用對(duì)象的更改卻也影響了oc所引用的同一對(duì)象,結(jié)合對(duì)之前的定義理解,這應(yīng)該是值傳遞的過(guò)程(傳遞的是對(duì)象引用的拷貝)。

以下附上另一個(gè)例子,兩個(gè)對(duì)象的交換函數(shù)(C++中可以輕易實(shí)現(xiàn)):

  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.     }  

輸出結(jié)果:

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

java在交換程序中并沒(méi)有交換兩個(gè)對(duì)象的值,交換的是兩個(gè)對(duì)象的拷貝,不能實(shí)現(xiàn)讓對(duì)象參數(shù)引用一個(gè)新對(duì)象,究其原因還是因?yàn)閖ava是采用了值傳遞而非引用傳遞。

還有不少和以前自己接觸的觀點(diǎn)不一樣的地方,當(dāng)然需要借鑒的吸收并且經(jīng)過(guò)自己的實(shí)踐來(lái)辨別。

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

【編輯推薦】

  1. 利用Java進(jìn)行MySql數(shù)據(jù)庫(kù)的導(dǎo)入和導(dǎo)出
  2. Java堆內(nèi)存的10個(gè)要點(diǎn)
  3. Play!在云端:Java PaaS平臺(tái)入門(mén)
  4. Java generic中通配符的幾點(diǎn)理解
  5. Java中泛型創(chuàng)建數(shù)組的總結(jié)
責(zé)任編輯:林師授 來(lái)源: tjuking的博客
相關(guān)推薦

2015-09-08 10:16:41

Java參數(shù)按值傳遞

2017-12-05 08:53:20

Golang參數(shù)傳遞

2020-10-24 15:50:54

Java值傳遞代碼

2022-07-29 08:05:31

Java值傳遞

2009-08-17 14:48:44

Java參數(shù)傳遞機(jī)制

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

2025-07-28 09:10:00

2024-09-04 01:36:51

Java對(duì)象傳遞

2009-10-16 13:08:40

VB自定義類型參數(shù)

2020-09-02 08:00:51

Java引用傳遞值傳遞

2024-04-28 11:36:07

LambdaPython函數(shù)

2009-08-06 16:32:49

SQL Server

2023-03-29 23:23:00

MyBatis參數(shù)框架

2022-11-02 15:00:03

Java值傳遞引用傳遞

2010-09-10 09:55:13

SQL參數(shù)變量

2024-09-19 20:59:49

2023-11-17 14:10:08

C++函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)