zoukankan      html  css  js  c++  java
  • java 值传递 数组传递

    在java中,不允许程序员选择值传递还是地址传递各个参数,基本类型总是按值传递。对于对象来说,是将对象的引用也就是副本传递给了方法,在方法中只有对对象进行修改才能影响该对象的值,操作对象的引用时是无法影响对象。

    现在说说数组:如果将单个基本类型数组的元素传递给方法,并在方法中对 其进行修改,则在被调用方法结束执行时,该元素中存储的并不是修改后的值,因为这种元素是按值传递,如果传递的是数组的引用,则对数组元素的后续修改可以 在原始数组中反映出来(因为数组本身就是个对象,int[] a = new int[2];,这里面的int是数组元素的类型,而数组元素的修改是操作对象)。

    public class Test{
        
        String str = new String("good");
        char[] ch = {'a','b','c'};
        int i = 10;
        public void change(String str,char[] ch,int i){
        
            str = "test ok";
            ch[0] = 'g';
            i++;    
        }
        
        public static void main(String[] args){
        
            Test tt = new Test();
            tt.change(tt.str,tt.ch,tt.i);
            System.out.println(tt.i);
            System.out.print(tt.str+" and ");
            System.out.println(tt.ch);     
        }
    

     tr是String类型的引用,i是基本类型变量,ch是数组名,也是数组对象的引用

    在chang()方法里,str="test ok",是一个新的对象把首地址放在引用变量str上;

    而ch[0]='g';因为传的是数组的引用,而此时ch[0]='g';是对数组元素的操作,能修改源数组的内容;

    i是整型值,只是把值copy了一份给方法,在方法的变化是不改变的源i的。

    所以结果是:

    10

    good and gbc

        public class Test{
            
            String str = new String("good");
            char[] ch = {'a','b','c'};
            int i = 10;
            public void change(String str,char ch,int i){
            
                str = "test ok";
                ch = 'g';
                this.i = i+1;    
            }
            
            public static void main(String[] args){
            
                Test tt = new Test();
                tt.change(tt.str,tt.ch[0],tt.i);
                System.out.println(tt.i);
                System.out.print(tt.str+" and ");
                System.out.println(tt.ch);     
            }
        }
    

    仔细观察下实参以及入参有何变化?

    change()方法里的入参char[] ch变成--------------char ch;

    这次传递的是个char值的单个数组元素,按照上面的解析,此时ch='9';是不影响源数组元素的。

    this.i = i+1;这里面等号左边的i是属性i,等号右边的i是局部变量(入参里的i);

    此时i+1后赋值给属性的i,自然会改变属性i的值,同时17行,tt.i又是调用属性的i,这次的结果是:

    11

    good and abc

    http://blog.csdn.net/niuniu20008/article/details/2953785

  • 相关阅读:
    ubuntu 12.04安装redis2.6.16
    linux常用命令(自我积累)-two
    计算机历年考研复试上机基础题(一)
    PhantomJS爬虫 -----全国高校查询-------计算机科学与技术前50大学
    python3爬虫 -----爬取大学信息并通过matplotlib与numpy绘制结果-----from最好大学网
    51Nod 1265 四点共面
    算法训练 出现次数最多的整数
    51nod 1101 换零钱 (完全背包)
    Poj3624 Charm Bracelet (01背包)
    Poj1258 Agri-Net (最小生成树 Prim算法 模板题)
  • 原文地址:https://www.cnblogs.com/PopShow/p/5207974.html
Copyright © 2011-2022 走看看