成人免费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技術棧公眾號

主站蜘蛛池模板: 久久久精品影院 | 成年人网站免费 | 毛片高清 | 999国产视频 | 久草福利| 亚洲美女网站 | 久久成人一区 | 欧美精品一区二区三区在线播放 | 精品91久久 | 国产精品视频一区二区三区 | 亚洲精品自在在线观看 | 中文字幕免费视频 | 精品麻豆剧传媒av国产九九九 | 精品免费国产一区二区三区四区介绍 | 在线久草 | 亚洲综合大片69999 | 91精品国产综合久久久久久蜜臀 | 国外成人在线视频网站 | 精品视频在线观看 | 亚洲综合色视频在线观看 | 欧美一级一 | 亚洲精品久久久一区二区三区 | 国产精品欧美一区二区三区不卡 | 亚洲精视频 | 亚洲国产精品一区二区三区 | 中文字幕1区 | www.日本在线播放 | 男人的天堂亚洲 | 亚洲三区在线观看 | 精品日韩一区二区 | 自拍亚洲| 久久69精品久久久久久久电影好 | 亚洲毛片在线观看 | 成人影院在线视频 | 精品中文字幕在线 | 亚洲国产精品一区二区久久 | 国产高清精品在线 | 日韩精品一区二区三区在线观看 | 亚洲一区二区三区免费视频 | 我要看黄色录像一级片 | 亚洲在线视频 |