日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Java經(jīng)典問(wèn)題:傳值與傳引用?

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

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

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

上面程序的正確運(yùn)行結(jié)果為:

Mighty Mouse

Mouse Mighty

你答對(duì)了嘛?

下面我們來(lái)分析一下:為什么會(huì)出現(xiàn)上面的運(yùn)行結(jié)果?

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

當(dāng)調(diào)用swap(stra, strb)函數(shù)時(shí),傳遞的是引用類型stra、strb的拷貝值,因此函數(shù)中任何對(duì)參數(shù)的改變都不會(huì)影響到stra和strb的值;而調(diào)用swap(strArr)時(shí),傳遞的是strArr的拷貝值,程序中對(duì)參數(shù)的任何改變?nèi)匀徊粫?huì)影響到strArr的值,然而swap(T[] t)中改變的并不是strArr的值,而是strArr[0]和strArr[1]的值,也就是引用類型strArr所指向的對(duì)象的值,因而strArr[0]和strArr[1]的值發(fā)生了變化。

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


網(wǎng)頁(yè)標(biāo)題:Java經(jīng)典問(wèn)題:傳值與傳引用?
當(dāng)前地址:http://www.dlmjj.cn/article/coegjcc.html