zoukankan      html  css  js  c++  java
  • java方法参数传值传引用的一点看法

    java 跟C++不同,java的方法参数都是传值,没有传引用。很多人都以为是传引用,而且这种错误的观点很普遍,今天在这里具体分析一下。方法参数有基本类 型,如int等,另外一种类型是OBJECT,对象。详细说一下方法参数是对象的,跟C++不同的是,JAVA方法参数传对象,传的是对这个对象引用的一 份拷贝,即地址值,跟原来的引用都是指向同一个对象。所以说,JAVA方法参数传的都是值。



    程序一 传的对象值是改变的。
    public class Test
    {
    public Test()
    {
    int [] count={5};
    change(count);
    System.out.println(count[0]);

    }
    public void change(int [] counts)
    {
    counts[0]=6;
    System.out.println(counts[0]);
    }
    public static void main(String [] args)
    {
    Test t=new Test();
    }

    }


    程序一中,输出结果都是6,change(count); 把对象的一份引用拷贝传给change(),这个拷贝跟原来的引用都是指向同一个对象。所以改变引用拷贝的值,对象的值也跟着改变。 程序2,传的对象值不改变
    class Foo{
    int i=0;
    }
    public class A{
    public static void main(String args[]){
    Foo f=new Foo();
    add(f);
    System.out.println(f.i);
    }
    public static void add(Foo f){
    f=new Foo();
    f.i++;
    }
    }

    输出结果是0
    程序2中,也是传一份引用的拷贝,但在 add()方法中,f=new Foo(); NEW出了一个新的对象,所以引用的拷贝指向了一个新的OBJECT。原来的值还是没有改变。 程序3 String 不改变,数组改变
    public class Example{
    String str=new String("good");
    char[]ch={'a','b','c'};
    public static void main(String args[]){
    Example ex=new Example();
    ex.change(ex.str,ex.ch);
    System.out.print(ex.str+" and ");
    Sytem.out.print(ex.ch);
    }
    public void change(String str,char ch[]){
    str="test ok";
    ch[0]='g';
    }
    }

    程序3输出的是 good and gbc.
    String 比较特别,是因为java在传string的时候把string当成基本类型来处理 。所以值是不变的。
  • 相关阅读:
    Struts2文件上传
    Struts2文件下载
    使用ajax()方法和后台交互
    简单的写数据到txt文件
    JPA初体验(使用Hibernate4实现)
    动态删除ArrayList中的元素
    MySQL5.5.15 源码 cmake 安装
    HeartBeat启动关闭mysqld服务的脚本修改
    MySQL MyISAM 转 Innodb
    2038/01/19 11:14:07 MySQL
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400556.html
Copyright © 2011-2022 走看看