samtiger


          QQ:418148757
          Name:yangchuan
          數(shù)據(jù)加載中……
          關(guān)于java數(shù)據(jù)類型和參數(shù)
              最近看了一些資料,清理了一下java基礎(chǔ)方面的知識,現(xiàn)寫下點筆記,待以后查閱。
              1: java的數(shù)據(jù)類型可以分為引用類型和原始類型(或內(nèi)置類型)。
              2:java編程語言只有值傳遞參數(shù)。
                 
                 參考了網(wǎng)上的一些說話,邊的兩點其實可以通過一個例子來解釋。
               
           class TblBsUserType(){
               
          private Long butyId;
               
          private TblBsDepartmentType tblBsDepartmentType;
               
          private String butyName;
               
          private String butyPassword;
               
          private String butyRemark;
               
          private String butyEmail;
               
               
          public Long getButyId() {
                  
          return this.butyId;
              }

              
              
          public void setButyId(Long butyId) {
                  
          this.butyId = butyId;
              }

             
          //為了保持簡潔,其他的屬性與上相似
            }
           

          上邊我創(chuàng)建了一個間單的用戶實體類,現(xiàn)在我們來構(gòu)建這個實體類的對象,代碼如下:
          public class TestUser extends TestCase {

          public void testAddUser() throws Exception {
                      
                  TblBsUserType user 
          = new TblBsUserType();
          }


          }
          上邊我創(chuàng)建了一個用戶對象,實際上上邊這個過程,可以理解成這么幾個步驟或狀態(tài):
           a: 右邊    new TblBsUserType(),這句是在內(nèi)存中創(chuàng)建了一個用戶實例,并通過“()”這對小括號去調(diào)用了不帶參數(shù)的構(gòu)造函數(shù)來初始化這個對象
           b: 并用 user這個變量。指向了這個對象,所以user就可以說是對這個對象的引用。
           c: 當(dāng)有一句user=null;的時候,表明user不再指向上邊這個對象,上邊這個對象此時就不在被任何對象牽制,這個時候的它就成為了垃圾回收機制關(guān)注的對象,等待被其回收。至于什么時候回收,就看垃圾回收機制什么時候執(zhí)行了。
              所以在把user作為參數(shù)傳給某個方法的時候,user是被值copy過去的,因此我們可以去改變user引用的這個對象里的任何東西,但是,我們在方法里頭改變了user參數(shù)的引用,跳出函數(shù)后,user變量還是指向上邊這個對象的。
          參考資料如下:
             /////////////////////以下內(nèi)容來自http://www.ibm.com/developerworks/cn/java/passbyval/index.html////////////

          Java 應(yīng)用程序中的變量可以為以下兩種類型之一:引用類型或基本類型。當(dāng)作為參數(shù)傳遞給一個方法時,處理這兩種類型的方式是相同的。兩種類型都是按值傳遞的;沒有一種按引用傳遞。這是一個重要特性,正如隨后的代碼示例所示的那樣。

          在繼續(xù)討論之前,定義 按值傳遞按引用傳遞這兩個術(shù)語是重要的。 按值傳遞意味著當(dāng)將一個參數(shù)傳遞給一個函數(shù)時,函數(shù)接收的是原始值的一個副本。因此,如果函數(shù)修改了該參數(shù),僅改變副本,而原始值保持不變。 按引用傳遞意味著當(dāng)將一個參數(shù)傳遞給一個函數(shù)時,函數(shù)接收的是原始值的內(nèi)存地址,而不是值的副本。因此,如果函數(shù)修改了該參數(shù),調(diào)用代碼中的原始值也隨之改變。

          關(guān)于 Java 應(yīng)用程序中參數(shù)傳遞的某些混淆源于這樣一個事實:許多程序員都是從 C++ 編程轉(zhuǎn)向 Java 編程的。C++ 既包含非引用類型,又包含引用類型,并分別按值和按引用傳遞它們。Java 編程語言有基本類型和對象引用;因此,認(rèn)為 Java 應(yīng)用程序像 C++ 那樣對基本類型使用按值傳遞,而對引用使用按引用傳遞是符合邏輯的。畢竟您會這么想,如果正在傳遞一個引用,則它一定是 按引用傳遞的。很容易就會相信這一點,實際上有一段時間我也相信是這樣,但這不正確。

          在 C++ 和 Java 應(yīng)用程序中,當(dāng)傳遞給函數(shù)的參數(shù)不是引用時,傳遞的都是該值的一個副本(按值傳遞)。區(qū)別在于引用。在 C++ 中當(dāng)傳遞給函數(shù)的參數(shù)是引用時,您傳遞的就是這個引用,或者內(nèi)存地址(按引用傳遞)。在 Java 應(yīng)用程序中,當(dāng)對象引用是傳遞給方法的一個參數(shù)時,您傳遞的是該引用的一個副本(按值傳遞),而不是引用本身。請注意,調(diào)用方法的對象引用和副本都指向同一個對象。這是一個重要區(qū)別。Java 應(yīng)用程序在傳遞不同類型的參數(shù)時,其作法與 C++ 并無不同。Java 應(yīng)用程序按值傳遞所有參數(shù),這樣就制作所有參數(shù)的副本,而不管它們的類型。

          ////////////////////////////////////////-----------------具體請到該網(wǎng)站察看------------------------------

          posted on 2007-09-24 20:13 sam.chuan.yang 閱讀(854) 評論(2)  編輯  收藏

          評論

          # re: 關(guān)于java數(shù)據(jù)類型和參數(shù) 2007-09-27 19:25 千里冰封

          JAVA里面都是按值傳遞 的,引用的時候,是引用的值的拷貝
            回復(fù)  更多評論    

          # re: 關(guān)于java數(shù)據(jù)類型和參數(shù) 2007-09-30 09:53 yi.c

          進(jìn)一步明白了
            回復(fù)  更多評論    

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 吉隆县| 承德县| 万全县| 台中市| 佳木斯市| 鹤山市| 孝感市| 郁南县| 简阳市| 婺源县| 原阳县| 鄂温| 当雄县| 平顶山市| 石台县| 迭部县| 山东省| 泸水县| 林甸县| 庄浪县| 抚顺市| 涪陵区| 鹤庆县| 南和县| 永吉县| 鹤壁市| 社旗县| 阳山县| 册亨县| 镇康县| 伊吾县| 萨迦县| 马关县| 云浮市| 南乐县| 朔州市| 凉山| 北流市| 泰安市| 岳普湖县| 理塘县|