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 
             */  
        }  
    }  
    
  • 相关阅读:
    ZOJ 1002 Fire Net
    Uva 12889 One-Two-Three
    URAL 1881 Long problem statement
    URAL 1880 Psych Up's Eigenvalues
    URAL 1877 Bicycle Codes
    URAL 1876 Centipede's Morning
    URAL 1873. GOV Chronicles
    Uva 839 Not so Mobile
    Uva 679 Dropping Balls
    An ac a day,keep wa away
  • 原文地址:https://www.cnblogs.com/eternityz/p/12239576.html
Copyright © 2011-2022 走看看