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

Java經典問題:傳值與傳引用?

開發 后端
Java到底是傳值還是傳引用?相信很少有人能完全回答正確。通常的說法是:對于基本數據類型(整型、浮點型、字符型、布爾型等),傳值;對于引用類型(對象、數組),傳引用。基本類型傳值,所有人都不會對此有疑義;問題出在引用類型上。

Java到底是傳值還是傳引用?相信很少有人能完全回答正確。通常的說法是:對于基本數據類型(整型、浮點型、字符型、布爾型等),傳值;對于引用類型(對象、數組),傳引用。基本類型傳值,所有人都不會對此有疑義;問題出在引用類型上。

為引入正題,不妨先看看下面的例子,你能正確給出程序的運行結果嘛?

 

  1. /**   
  2.  * @(#)Swap.java  
  3.  *  
  4.  *  
  5.  *  @author    
  6.  *  @version  1.00 2007/1/5  
  7.   */   
  8.    
  9.    
  10.   public   class  Swap   {  
  11.  
  12.      public  Swap()   {}   
  13.       
  14.      public   static   void  main(String[] args)   {  
  15.         Changer c  =   new  Changer();  
  16.           
  17.         String stra  =   " Mighty " ;  
  18.         String strb  =   " Mouse " ;  
  19.            c.swap(stra, strb);  
  20.         System.out.println(stra  +   "   "   +  strb);  
  21.           
  22.         String[] strArr  =   new  String[ 2 ] ;  
  23.         strArr[ 0 ]  =  stra;  
  24.         strArr[ 1 ]  =  strb;  
  25.         c.swap(strArr);  
  26.         System.out.println(strArr[ 0 ]  +    "   "   +  strArr[ 1 ]);           
  27.     }   
  28.       
  29.      static   class  Changer   {        
  30.          public   < T >   void  swap(T a, T b)   {  
  31.             T temp  =  a;  
  32.             a  =  b;  
  33.             b  =  temp;  
  34.         }   
  35.           
  36.          public   < T >   void  swap(T[] t)   {  
  37.              if  (t.length  <   2 )   {  
  38.                 System.out.println( " error! " );  
  39.                  return ;  
  40.             }   
  41.               
  42.             T temp  =  t[ 0 ];  
  43.             t[ 0 ]  =  t[ 1 ];  
  44.             t[ 1 ]  =  temp;  
  45.         }   
  46.     }   
  47. }   

 

上面程序的正確運行結果為:

Mighty Mouse

Mouse Mighty

你答對了嘛?

下面我們來分析一下:為什么會出現上面的運行結果?

為分析這個問題,我們必須對程序中的數據在內存中的布局有一定了解。上面main程序中和String相關的變量共有3個,其布局可以用下圖所示:

 

 

當調用swap(stra, strb)函數時,傳遞的是引用類型stra、strb的拷貝值,因此函數中任何對參數的改變都不會影響到stra和strb的值;而調用swap(strArr)時,傳遞的是strArr的拷貝值,程序中對參數的任何改變仍然不會影響到strArr的值,然而swap(T[] t)中改變的并不是strArr的值,而是strArr[0]和strArr[1]的值,也就是引用類型strArr所指向的對象的值,因而strArr[0]和strArr[1]的值發生了變化。

從上面的分析,我們可以得出結論:對于引用類型,其實參數傳遞時仍然是按值傳遞的;當然,按引用傳遞也不是完全沒有道理,只是參考對象不是引用類型本身,而是引用類型所指向的對象。

【編輯推薦】

  1. 探秘JDK 7之四:下一代I/O(NIO.2)
  2. 性能優化總結:CPU和Load、NIO以及多線程
  3. Java 7 NIO2高性能Web服務器并發連接的處理
  4. 初試Java 7 NIO2:實現高性能的HTTP Server
  5. Google技術演講介紹Java 7 NIO.2概覽
責任編輯:金賀 來源: ITEYE博客
相關推薦

2009-05-06 16:10:17

Java傳值引用

2023-11-29 09:47:11

C++對象

2012-06-29 13:31:56

ServletJSPJava

2021-05-27 05:35:45

Go傳值傳引用

2009-07-06 10:00:31

JSP頁面傳值

2010-01-25 15:15:46

Android傳值

2013-07-24 16:47:23

iOS開發學習iOS協議代理傳值

2011-05-19 17:49:08

ActivityAndroid開發

2021-05-19 09:53:16

SpringbootMyBatisMySQL

2013-06-03 10:22:41

iOS開發移動開發頁面間傳值

2016-09-18 19:07:33

Java值傳遞引用傳遞

2011-04-08 10:36:38

MFC多線程

2009-09-07 03:44:50

C#窗體間傳值

2009-09-07 03:58:42

WinForm傳值

2012-05-14 21:14:07

Android頁面傳值

2023-04-18 09:17:40

父子組件Vue

2024-10-29 09:08:07

2009-07-03 13:24:56

JSP表單

2024-07-03 08:04:34

2010-05-11 16:55:12

Windows Pho
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区视频在线 | 亚洲免费在线视频 | 久久免费精品视频 | 日韩欧美二区 | 视频一区二区在线 | 国内自拍视频在线观看 | 人人鲁人人莫人人爱精品 | 国产日产精品一区二区三区四区 | 日韩免费中文字幕 | 日韩一区二区三区精品 | 欧美啪啪 | 国产一区二区在线播放 | 欧美一区二区三区视频在线观看 | 欧美中文字幕在线观看 | 亚洲综合在线播放 | 羞羞的视频在线看 | 国产精品999 | 国产精品性做久久久久久 | 午夜男人视频 | 欧美h视频 | 亚洲欧美男人天堂 | 亚洲精品一 | 黄色大片免费看 | 欧美一级片在线看 | 免费亚洲婷婷 | 日本一区二区影视 | 日本精品免费在线观看 | 国产精品免费看 | 精品欧美一区二区中文字幕视频 | 99福利网| 欧美日韩国产一区二区 | 国产色黄| 九色av| 国产欧美精品一区二区三区 | 欧美乱大交xxxxx另类电影 | 国产91在线播放 | 国产成人精品一区二区三区四区 | 亚洲福利网 | 一级黄色片网址 | 91精品久久久久久久久99蜜臂 | 二区三区视频 |