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

Java經(jīng)典問題:傳值與傳引用?

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

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

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

 

  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

你答對了嘛?

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

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

 

 

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

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

【編輯推薦】

  1. 探秘JDK 7之四:下一代I/O(NIO.2)
  2. 性能優(yōu)化總結:CPU和Load、NIO以及多線程
  3. Java 7 NIO2高性能Web服務器并發(fā)連接的處理
  4. 初試Java 7 NIO2:實現(xiàn)高性能的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頁面?zhèn)髦?/a>

2010-01-25 15:15:46

Android傳值

2011-05-19 17:49:08

ActivityAndroid開發(fā)

2021-05-19 09:53:16

SpringbootMyBatisMySQL

2013-07-24 16:47:23

iOS開發(fā)學習iOS協(xié)議代理傳值

2013-06-03 10:22:41

iOS開發(fā)移動開發(fā)頁面間傳值

2016-09-18 19:07:33

Java值傳遞引用傳遞

2011-04-08 10:36:38

MFC多線程

2012-05-14 21:14:07

Android頁面?zhèn)髦?/a>

2023-04-18 09:17:40

父子組件Vue

2024-07-03 08:04:34

2009-07-03 13:24:56

JSP表單

2024-10-29 09:08:07

2009-09-07 03:58:42

WinForm傳值

2009-09-07 03:44:50

C#窗體間傳值

2010-05-11 16:55:12

Windows Pho
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 999免费观看视频 | 中文字幕一区二区三区精彩视频 | 伊人网站视频 | 国产色播av在线 | 国产高清性xxxxxxxx | 久久中文字幕一区 | 久久99精品久久久 | 亚洲一区二区视频 | 五月婷婷激情网 | 嫩草视频免费 | 高清一区二区三区 | 亚洲成人在线免费 | 国产免费观看一级国产 | 免费h视频 | 蜜桃在线视频 | 午夜看片 | 九九久久精品 | 九色视频网站 | 久久成人精品视频 | 国产成人啪免费观看软件 | 国产精品久久久久久久久久妞妞 | 狠狠爱免费视频 | 国产成人一区在线 | 九一国产精品 | 欧美精品在线观看 | 亚洲91 | 中文字幕精品一区二区三区精品 | 国产精久久久久久 | 亚洲香蕉在线视频 | 久久久国产视频 | 日日夜夜草 | 国产精品久久久久久久久久尿 | 国产精品久久国产精品 | 97免费在线视频 | 91精品久久久久久久久 | 一区二区三区视频在线观看 | 91香蕉嫩草| 精品国产一区二区三区日日嗨 | 久久精品综合网 | 亚洲国产成人精品女人久久久 | 欧美久久久网站 |