• java值传递详解


    java的值传递详解

    1. 首先我们需要弄清楚基本数据类型和引用数据类型的区别
      int num = 0;
      String str = "java";
      基本数据类型直接保存在变量中,而引用数据类型保存在变量中的是地址值,地址指向实际对象,所以被称为引用数据类型。

      2. 再来弄清楚赋值运算符(=)的作用
      num = 20;
      str = "hello";
      基本数据类型直接修改变量中存储的数值,而应用数据类型是修改了变量中保存的地址,新地址指向所赋值的实际对象,原来的对象并没有改变。没有任何地址指向的对象就是垃圾会被java垃圾回收机制回收

      3. 值传递实际例子
      //第一个例子:基本类型
      void foo(int value) {
      value = 100;
      }
      foo(num); // num 没有被改变
      //第二个例子:没有提供改变自身方法的引用类型
      void foo(String text) {
      text = "windows";
      }
      foo(str); // str 也没有被改变
      //第三个例子:提供了改变自身方法的引用类型
      StringBuilder sb = new StringBuilder("iphone");
      void foo(StringBuilder builder) {
      builder.append("4");
      }
      foo(sb); // sb 被改变了,变成了"iphone4"。
      //第四个例子:提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符。
      StringBuilder sb = new StringBuilder("iphone");
      void foo(StringBuilder builder) {
      builder = new StringBuilder("ipad");
      }
      foo(sb); // sb 没有被改变,还是 "iphone"。
      第一个例子,对于基本数据类型来说,因为是值传递,将num的值赋给形参value,所以num并不会改变。
      第二个例子,对于引用数据类型来说,将str的地址赋值给text,函数中改变的是text的地址值,所以str没有变换。
      第三个例子,在函数中sb的地址赋值给形参builder,builder的地址没有变化,而实际对象"iphone"被修改成”iphone4“,所以sb地址指向的值从”iphone“变成了”iphone4“。


      第四个例子,在函数中sb的地址赋值给形参builder,而builder的地址发生变化,原来的实际对象i并没有发生改变,因此sb没有改变,依旧指向”iphone“。

  • 相关阅读:
    17.10.30
    17.10.28&29
    PDO和Mysqli的区别
    ajax--->请求异常 jQuery提示parsererror错误解决办法
    ajax--->http头信息的content-type是application/x-www-form-urlencoded或application/json区别
    php--->把json传来的stdClass Object类型转array
    mysql--->mysql查看数据库操作记录
    js解析json时报:Unexpected token s in JSON at position 0
    code review工具之codebrag安装使用
    linux-->yii2报yiidbException错
  • 原文地址:https://www.cnblogs.com/jiangblog/p/12861838.html
Copyright © 2020-2023  润新知