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

Java參數按值傳遞?按引用傳遞

開發 后端
有時候在想,java在調用方法時候究竟是按值傳遞還是按引用傳遞,之前有人說是基本數據類型按值傳遞,引用類型按引用傳遞。一時間,似乎都有道理。

有時候在想,java在調用方法時候究竟是按值傳遞還是按引用傳遞,之前有人說是基本數據類型按值傳遞,引用類型按引用傳遞。一時間,似乎都有道理。

筆者在此不追究字眼上的辨別識字能力,把自己對這個問題的理解闡述一下,筆者不想說這是按值傳遞還是按引用傳遞,自己理解就好了吧,畢竟java會用才是王道。

先看一下下面的代碼:

 

  1. package shb.java.testmemory; 
  2.  
  3. public class TestMeo { 
  4.  
  5.     /**測試基本數據類型以及引用類型參數按值傳遞 
  6.      * @Description: 
  7.      * @author shaobn 
  8.      * @param args 
  9.      * @Date:2015-9-8 上午7:53:56  
  10.      */ 
  11.     public static void main(String[] args) { 
  12.         // TODO Auto-generated method stub 
  13.         testInt(); 
  14.         testStr(); 
  15.         testPack(); 
  16.         testObj(); 
  17.         testObj_2(); 
  18.     } 
  19.     //NO1.測試基本數據類型 
  20.     public static void testInt(){ 
  21.         int num1 = 12
  22.         System.out.println("Before change::"+num1); 
  23.         changeInt(num1); 
  24.         System.out.println("After change::"+num1); 
  25.     } 
  26.     //測試字符串類型 
  27.     public static void testStr(){ 
  28.         String str = "helloworld"
  29.         System.out.println("Before change::"+str); 
  30.         changeStr(str); 
  31.         System.out.println("After change::"+str); 
  32.          
  33.     } 
  34.     //測試包裝類型 
  35.     public static void testPack(){ 
  36.         Integer integer = new Integer(42); 
  37.         System.out.println("Before change::"+integer); 
  38.         changePack(integer); 
  39.         System.out.println("After change::"+integer); 
  40.     } 
  41.     //測試引用類型 
  42.     public static void     testObj(){ 
  43.         Person person = new Person(); 
  44.         System.out.println("Before change::"+person.age); 
  45.         changeObj(person); 
  46.         System.out.println("After change::"+person.age); 
  47.     } 
  48.     //測試引用類型方式二 
  49.     public static void     testObj_2(){ 
  50.         Person person = new Person(); 
  51.         System.out.println("Before change::"+person.age); 
  52.         changeObj_2(person); 
  53.         System.out.println("After change::"+person.age); 
  54.     } 
  55.     public static void    changeInt(int num){ 
  56.         num = 21
  57.     } 
  58.     public static void     changeStr(String str){ 
  59.         str = "hellobeijing"
  60.     } 
  61.     public static void     changePack(Integer integer){ 
  62.         integer = new Integer(89); 
  63.     } 
  64.     public static void     changeObj(Person person){ 
  65.         person.age = 87;     
  66.     } 
  67.     public static void     changeObj_2(Person person){ 
  68.         person = new Person(); 
  69.         person.age = 78
  70.     } 
  71. //引用類型測試類 
  72. class Person{ 
  73.     public  int age = 78

Look NO1:

    

 

    [[148217]]

說明一下:筆者在上面畫的兩張圖著實不咋樣,只能做到這種程度了。我們分析一下:當數據為基本數據類型時,我們傳給形參的僅僅是一個實參的副本(Copy),當然由于棧內存變量共享的特征,這兩個變量共同指向此變量值。

當我們對形參進行改變時,首先,在棧內存中會尋找是否存在新的變量值,如果有,則指向新的變量值(體現棧內存數據共享的特點)。如果沒有的話,在棧內存中回開辟一塊空間,存儲新的變量值,同時形參變量會指向新的變量值。

此時我們發現,這時的變量值已經與實參的變量沒有關系,兩個獨立的變量。所以經過函數后改變的變量值與之前的沒有關系,故輸出的還是之前的變量值。

另外,我們看到,當傳遞對象的引用時,person引用變量中存儲的是Person對象在堆內存中的內存地址,所以傳遞的是內存地址(筆者理解為是一串數字)。此時兩個形參變量是有共同的內存地址值,所以指向同一個內存對象。我們觀察

發現,當我們改變對象中的屬性值時,有牽一發而動全身的感覺,只要你改變這個對象,這個對象就被改變,而不存在另外開辟一個對象的概念(String類型和包裝類型除外)。

PS:還沒有寫完,正在上班時間,晚上再寫吧!

如有錯誤,請大家幫忙糾正一下。

責任編輯:王雪燕 來源: 博客園
相關推薦

2022-07-29 08:05:31

Java值傳遞

2009-08-17 14:48:44

Java參數傳遞機制

2019-04-17 13:48:19

JavaScript前端傳遞

2012-02-21 14:04:15

Java

2016-09-18 19:07:33

Java值傳遞引用傳遞

2023-11-15 09:14:27

Java值傳遞

2024-09-04 01:36:51

Java對象傳遞

2020-09-02 08:00:51

Java引用傳遞值傳遞

2017-12-05 08:53:20

Golang參數傳遞

2022-11-02 15:00:03

Java值傳遞引用傳遞

2010-07-26 13:13:33

Perl函數參數

2011-03-25 13:44:28

Java值傳遞

2021-04-13 07:51:24

JavaScript引用傳遞

2009-09-04 11:00:13

通過C#引用傳遞

2009-09-09 11:07:52

LINQ to SQL

2024-12-09 09:00:00

拷貝構造函數傳遞編程

2023-03-29 23:23:00

MyBatis參數框架

2010-09-10 09:55:13

SQL參數變量

2023-11-29 09:47:11

C++對象

2025-02-12 10:51:51

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本久草 | 天堂在线91 | 国产女人与拘做视频免费 | 农村真人裸体丰满少妇毛片 | 久久免费精品 | 久久男人天堂 | 91人人在线 | 福利一区二区在线 | 看片地址 | 国产一区二区三区四区hd | 日日干日日操 | 国产精品美女久久久久aⅴ国产馆 | 国产精品区二区三区日本 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 毛片高清 | 久久久婷婷 | 精品一区久久 | 日韩精品一区二区三区免费视频 | 四虎影音 | 成人在线视频一区二区三区 | 99精品在线观看 | 久久午夜影院 | 日本三级全黄三级a | 69xxx免费| 久久噜噜噜精品国产亚洲综合 | 美女一级a毛片免费观看97 | 日韩精品一区二区三区中文在线 | 亚洲视频欧美视频 | 日一日操一操 | 国产午夜精品一区二区三区四区 | 亚洲免费视频播放 | 色嗨嗨| av黄在线观看 | 欧美综合在线视频 | 欧美中文字幕一区二区三区亚洲 | 日韩欧美理论片 | 成人a免费| 亚洲国产成人在线视频 | 午夜无码国产理论在线 | 99国产精品视频免费观看一公开 | www.97国产|