zoukankan      html  css  js  c++  java
  • java参数的值传递和引用传递

    今天抽了点时间继续啃java核心基础,即使出来做web挺长时间了,始终觉得基础极其重要。

    遇到了java参数的传递类型,豁然开朗之时不忘写下记录。

    java中采用的总是值传递,包括对对象参数的传递,采用的也是值传递!

    首先,最普通的数据类型  例如 :

    int a = 10 ; 

    int b  = 20 ; 

    public void add(int a , int b){

      a = a + 10 ; 

         b = b+ 10 ;

    结果是 :   a 依旧为10   b 依旧为20   

    其次:

    public Employee {

      private Double salary;  

        ...

    }

    public test {

      public static void main(Stirng[] args){

        Employee e = new Employee() ;

        changeVal(e);

        //之后输入 e的薪水     会发现  e的薪水的确加了  100.

      }

      public static void changeVal(Employee e){

        e.setSalary(e.getSalary() + 100 );

      }

    }

    结果:e的薪水状态值发生了改变,在方法调用是,changeVal(e)  , 这个e拿到了相同的引用地址,然后在方法内部时,对薪水状态发生了改变,所以虽然方法

    走完后,e被废弃了,但是同样引用地址对应的变量值确确实实也发生了变化,所以状态被改变了。

    最后:

    java 对对象也是用的值传递,(即使给的是引用地址。)

    Employee x = new Employee("X");
    Employee y = new Employee("Y");
    Employee.swap(x, y);
    System.out.println(x);
    System.out.println(y);

    public static void swap(Employee x , Employee y){
    Employee temp = x;     //x 给了 temp temp持有x的引用
    x = y;       //x持有y的引用
    y = temp;       //y持有temp的引用 》》 结果 : y持有x的引用 最终 打印出来的却是大跌眼镜 X还是X Y还是Y

    }

    原因:  为什么最后x在tostring后发现还是原来的x    y也还是原来的y?
    其实在方法调用的时候 ,  swap(x,y)   这里的x 和y是原有的一份拷贝,    所以参数x和参数y在内部如何改变指向,都只是改变了参数x和参数y的指向,而不会改变真正x和y的指向。

    总结: 

     1.值变量在函数结束后还是不会被改变。

     2 函数可以改变对象的状态。

     3 函数不能改变对象的引用。

  • 相关阅读:
    模态框获取内容jQuery
    jQuery支持链式编程,一句话实现左侧table页+常用筛选器总结
    jquery实现全选、取消反选、加JavaScript三元运算(三种法法实现反选)
    用dom1来实现,根据光标移动自动给表单加上背景色,光标移开自动去除背景色
    JavaScript两种创建标签的的方法,实现点击按钮让text自增
    vue前端路由搜索功能实现
    pycharm配置vue
    QT全局事件和绑定
    mysql事务、锁
    web前端上传文件按钮自定义样式
  • 原文地址:https://www.cnblogs.com/cztisthebest/p/6640302.html
Copyright © 2011-2022 走看看