• 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 函数不能改变对象的引用。

  • 相关阅读:
    <O(n),O(1)>的LCA
    hdu6110
    ACM模板
    prufer编码
    UvaLive6893_The_Big_Painting
    HDU5669
    Codeforces786B
    二分图部分总结
    Git简介和Windows下安装步骤
    笔记本电脑插入耳机后无法使用解决办法
  • 原文地址:https://www.cnblogs.com/cztisthebest/p/6640302.html
Copyright © 2020-2023  润新知