zoukankan      html  css  js  c++  java
  • 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“。

  • 相关阅读:
    前后台验证字符串长度
    接口和抽象类该什么时候用?
    程序员常去网站汇总
    SQLServer复合查询条件(AND,OR,NOT)对NULL值的处理方法
    c#-轮询算法
    常用的SQL语句
    HTTP请求工具类
    asp.net mvc jQuery 城市二级联动
    ibatis动态多条件查询及模糊查询(oracle,mysql,sql)
    iBatis 中 Like 的写法实现模糊查询
  • 原文地址:https://www.cnblogs.com/jiangblog/p/12861838.html
Copyright © 2011-2022 走看看