zoukankan      html  css  js  c++  java
  • JAVA中值传递,引用传递

    刚在写一个用例,需要在方法中改变传递的参数的值,可是java中只有传值调用,没有传址调用。所以在java方法中改变参数的值是行不通的。但是可以改变引用变量的属性值。
    可以仔细理解一下下面几句话:

    1、对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有变量的值。
    2、对于引用类型参数,在方法体内对参数进行重新赋予引用,并不会改变原有变量所持有的引用。 
    3、方法体内对参数进行运算,不影响原有变量的值。 
    4、方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值。 
    

    也就是说,对于基本数据类型,实现的是传值,只是个形参,不会改变原有值。对于引用数据类型,对这个引用进行操作,其实也是相当于对形参的操作,不会改变原来的引用。但是,当对这个引用的属性进行操作的时候,相当于CPP中的传址调用,可以改变这个引用的属性的值。
    举个例子:

    public class Main {  
      
        private static void getMiddleOne(boolean b, Boolean boo, Boolean[] arr){  
            b = true;  //形参,不会改变原有值  
            boo = new Boolean(true);  //引用变量的直接操作相当于值传递,不会改变原来的引用变量  
            arr[0] = true;  //引用变量的属性的操作,会改变原有引用的属性,相当于传址调用  
        }  
          
        //测试  
        public static void main(String[] args) {  
            boolean b = false;  
            Boolean boo = new Boolean(false);  
            Boolean[] arr = new Boolean[]{false};  
      
            getMiddleOne(b, boo, arr);  
              
            System.out.println(b);    
            System.out.println(boo.toString());  
            System.out.println(arr[0]);  
      
            /** 
             * output: 
             *      false 
             *      false 
             *      true 
             */  
        }  
    }  
    
  • 相关阅读:
    caffe常用层: batchNorm层和scale层
    简述configure、pkg-config、pkg_config_path三者的关系
    python删除list中元素的三种方法
    Leetcode 872. Leaf-Similar Trees
    Leetcode 508. Most Frequent Subtree Sum
    Leetcode 572. Subtree of Another Tree
    Leetcode 894. All Possible Full Binary Trees
    Leetcode 814. Binary Tree Pruning
    Leetcode 557. Reverse Words in a String III
    python 多维list声明时的小问题
  • 原文地址:https://www.cnblogs.com/eternityz/p/12239576.html
Copyright © 2011-2022 走看看