函數中參數傳值

来源:https://www.cnblogs.com/lovekey/archive/2022/06/15/15862533.html
-Advertisement-
Play Games

函數中參數傳值 1、基本數據類型傳值 當函數中傳入的參數為基本數據類型時,函數中對傳入參數的操作不會對函數外的數據產生影響。由於基本數據類型的變數名指向的是具體的數值,在函數內部,相當於將參數進行了拷貝,函數內只對拷貝後的參數進行操作。 基本數據類型 public class ParamsTrans ...


函數中參數傳值

1、基本數據類型傳值

當函數中傳入的參數為基本數據類型時,函數中對傳入參數的操作不會對函數外的數據產生影響。由於基本數據類型的變數名指向的是具體的數值,在函數內部,相當於將參數進行了拷貝,函數內只對拷貝後的參數進行操作。

  • 基本數據類型
public class ParamsTrans {
    /**
     * 基本數據類型傳值
     * @param a 基本數據類型
     */
    private static void primitiveType(int a){
        a = 1;
    }

    public static void main(String[] args) {
        int primitiveParam = 0;
        ParamsTrans.primitiveType(primitiveParam);
        System.out.println(primitiveParam);
    }
}

// 結果:0

結果分析:基本數據類型primitiveParam初始值為0,在函數中對其值進行修改,輸出值仍為0,說明函數內的操作未生效。

  • 基本數據類型數組
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ParamsTrans {
    /**
     * 基本數據類型數組傳值
     * @param d
     */
    private static void arrayType(int[] d){
        d[0] = 1;
        System.out.println("d hashcode:" + d.hashCode());
    }

    public static void main(String[] args) {
        int[] arrayParam = new int[2];
        arrayType(arrayParam);
        System.out.println(Arrays.toString(arrayParam));
        System.out.println("arrayParam hashcode:" + arrayParam.hashCode());
    }
}


// 結果:
// d hashcode:460141958
// [1, 0]
// arrayParam hashcode:460141958

結果分析:基本數據類型數組與基本數據類型在參數傳值時,具有相同特性。

2、引用數據類型傳值

當函數中傳入的參數為引用數據類型時,函數中對傳入參數的操作會對函數外的數據產生影響。由於引用變數指向對象的記憶體地址,在函數內部,參數只是創建了一個新的變數指向同一個對象,函數中對此對象進行操作,函數外的引用變數也會相應改變。

import java.util.ArrayList;
import java.util.List;

public class ParamsTrans {
    /**
     * 引用數據類型傳值
     * @param b 引用數據類型
     */
    private static void QuoteType(List<Integer> b){
        b.add(1);
        System.out.println("b hashcode:" + b.hashCode());
    }

    public static void main(String[] args) {
        List<Integer> quoteParam = new ArrayList<>();
        ParamsTrans.QuoteType(quoteParam);
        System.out.println(quoteParam.toString());
        System.out.println("quoteParam hashcode:" + quoteParam.hashCode());
    }
}

// 結果:
// b hashcode:32
// [1]
// quoteParam hashcode:32

結果分析:引用數據類型quoteParam初始值為空,在函數中添加元素,輸出值為[1],說明函數內的操作已生效。由變數hash值可以看出,函數內與函數外為同一變數。

3、包裝數據類型傳值

在Java中,有一些對基本數據類型進行包裝的類型,在參數傳值時比較容易混淆,如:String、Integer、Double等。

  • String類型

    public class ParamsTrans {
        /**
         * Sting類型傳值
         * @param c
         */
        private static void StringType(String c){
            c = "b";
            System.out.println("c hashcode:" + c.hashCode());
        }
    
        public static void main(String[] args) {
            String stringParam = "a";
            StringType(stringParam);
            System.out.println(stringParam);
            System.out.println("stringParam hashcode:" + stringParam.hashCode());
        }
    }
    
    // 結果:
    // c hashcode:98
    // a
    // stringParam hashcode:97
    

    結果分析:由代碼執行結果可以看出,String類型雖然是引用變數,但是在函數中對其進行修改的操作並未生效,且函數內與函數外的變數也並不是同一個變數。這不符合上述引用數據類型的規律,由String類型源碼可知,String中字元串實際是用char[]數組進行存儲的,相當於是char[]的包裝類。因此,在參數傳遞時,是對參數進行了拷貝。

  • Integer類型及包裝類型

    根據上述對String類型的分析,查看Integer類源碼,對Integer類進行賦值實際是對int類型進行操作。綜上所述,在函數參數傳值時,Integer與String具有相同特性。再推廣至包裝類型,所有包裝類型均具有此特性。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • phpcurl函數類模擬Curl get post header refer攜帶Cookie模擬訪問來源Refer模擬UseaAgent ...
  • 一個工作5年的粉絲找到我,他說參加美團面試,遇到一個基礎題沒回答上來。 這個問題是:“資料庫連接池有什麼用?以及它有哪些關鍵參數”? 我說,這個問題都不知道,那你項目裡面的連接池配置怎麼設置的? 你們猜他怎麼回答。懂得懂得啊。 好的,關於這個問題,我們來看看普通人和高手的回答。 普通人: 資料庫連接 ...
  • Principle of token bucket 隨著互聯網的發展,在處理流量的方法也不僅僅為 first-come,first-served,而在共用網路中實現流量管理的基本機制就是排隊。而公平演算法則是實現在優先順序隊列中基於哪些策略來排隊的”公平隊列“。Token Bucket 則是為公平排隊提 ...
  • 1. 指數增長模型 設第今年的人口為 \(x_0\),年增長率為 \(r\),預測 \(k\) 年後的人口為 \(x_k\),則有 \[ x_k = x_0(1+r)^k \tag{1} \] 這個模型的前提是年增長率 \(r\) 在 \(k\) 年內保持不變. 利用 (1) 式可以根據人口估計年增 ...
  • 日常開發中,我們都會用到線程池,一般會用execute()和submit()方法提交任務。但是當你用過CompletableFuture之後,就會發現以前的線程池處理任務有多難用,功能有多簡陋,CompletableFuture又是多麼簡潔優雅。 要知道CompletableFuture已經隨著Ja ...
  • 能夠理解服務監控三要素 能夠理解常用的APM系統優勢差異 能夠基於IDEA集成Skywalking Agent 能基於生產環境使用Skywalking Agent 掌握Rocketbot 性能分析 鏈路追蹤 儀錶盤應用 Webhook 1 Skywalking概述 隨著互聯網架構的擴張,分散式系統變 ...
  • 作者:永動的圖靈機 鏈接:https://juejin.cn/post/6844904033488994317 統一結果返回 目前的前後端開發大部分數據的傳輸格式都是json,因此定義一個統一規範的數據格式有利於前後端的交互與UI的展示。 統一結果的一般形式 是否響應成功; 響應狀態碼; 狀態碼描述 ...
  • 今天產品下了新需求,要給系統加雙語切換,在做到國家城市庫映射的時候,我在度娘上找了個雙語版的資料庫,可是系統已經在生產半年了,直接換表肯定是要背鍋的,轉念一想,要是能把城市信息直接替換為拼音不就行了,在此將操作步驟整理下來。 首先需要安裝一下擴展overtrue/pinyin,執行命令,我的框架是6 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...