`
ganglong99
  • 浏览: 160138 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Java方法传递参数说明

阅读更多

我们都知道,Java中对于基本数据类型作为方法参数时,都是值传递。

那么对象作为方法的参数,又是传递的什么呢?

java的方法参数都是传值,没有传引用。很多人都以为是传引用,而且这种错误的观点很普遍,今天在这里具体分析一下。方法参数有基本类型,如int等,另外一种类型是OBJECT,对象。详细说一下方法参数是对象的,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(),这个拷贝跟原来的引用都是指向同一个对象。所以改变引用拷贝的值,对象的值也跟着改变。

 

程序二 传的对象值不改变

    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出了一个新的对象,所以引用的拷贝指向了一个新的对象。原来的引用还是指向原来的对象,所以原来的值还是没有改变。

从这一点就可以看出,确实产生了一个引用的拷贝。

 

程序三 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当成基本类型来处理 。所以值是不变的。

分享到:
评论

相关推荐

    java参数传递

    这里详细的说明了,java参数传递的过程,引用传递,值传递

    传递指定的参数建立websocket连接,并给指定的连接用户发送消息

    传递指定的参数建立websocket连接,并给指定的连接用户发送消息(包中有说明),代码中有注释,并附上调用代码

    java调用.net的webservice传字符串参数

    java调用.net的webservice传字符串参数,axis方式和xfire方式的使用说明及相关jar包。

    java的类别方法(格式:PPT 字体:繁体)

    Java方法的参数列是资讯传递的机制,可以从外面将资讯送入程序的黑盒子,参数列是方法的使用介面. 一个方法如果拥有参数列,在呼叫方法时,传入不同的参数就可以产生不同的执行结果. 4-3-2 类别方法的参数传递-范例 例如...

    Java语言实用教程

    5.3 参数传递 5.4 匿名对象 5.5 习题 第6章 Java类的高级特性 6.1 访问权限 6.2 方法重载 6.3 构造方法 …… 第7章 继承、接口和包 第8章 系统常用类 第9章 异常处理 第10章 输入输出流与文件处理 第11章 简单GUI...

    java的传值与传引用详解

     大家可以明显的看到,按指针传递参数可以方便的修改通过参数传递进来的值,而按值传递就不行。  当 Java 成长起来的时候,许多的 C 程序员开始转向学习 Java,他们发现,使用类似 SwapValue 的方法仍然不能改变...

    JAVA API中文版下载(2)

    提供查询java类,方法的说明!具体函数的说明,传递参数及返回类型!

    Java传参方式-值传递还是引用传递

    写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用传递参数,以避免因依赖“按引用传递”这一行为而导致的常见编程错误。  对此节选的某些反馈意见认为,我把这一问题搞糊涂了,或者将它完全搞错了。...

    JAVA API中文版下载(1)

    提供查询java类,方法的说明!具体函数的说明,传递参数及返回类型!

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    消息是以参数的形式传递给某方法的。一个消息通常由三部分组成: 1. 消息传送到对象的名称。 2. 要执行的方法的名称。 3. 方法需要的任意参数。 2.2.4 类 类是一个蓝图或样板,定义了某种类型的所有对象的变量...

    java-basic:只是一个简单的类,用于显示方法的调用方式,如何将参数传递给方法,方法如何返回值

    Java基础 只是一个简单的类,说明如何调用方法,如何将参数传递给方法,方法如何返回值:)

    java求极限

    使用java调用matlab 详细代码示例说明以及用java调用matlab数学函数库参数的传递等,包含架包文件,可以直接运行使用,该代码仅供参考。

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    JAVA语言程序设计【高清版】.pdf

    64 5.2.2 默认的构造方法 66 5.3 定义方法 67 5.3.1 方法定义格式 68 5.3.2 按值传递 71 5.4 类的继承 72 5.4.1 继承的定义 73 5.4.2 多态性与转换对象 74 5.5 继续讨论Java的关键字 77 5.5.1 ...

    解决 Spring RestTemplate post传递参数时报错问题

    本文详解说明了RestTemplate post传递参数时报错的问题及其原由,需要的朋友可以参考下

    基于人脸识别的智能门禁管理系统源码+数据库(java).zip

    传递参数: 参数ID 中文名称 说明 示例 deviceCode 机器码(唯一) 1 返回值: { “code”:1, “msg”:”操作成功”, “data”:{ “deviceFileId”:”设备编号”, “deviceName”:”设备名称(仓库名称)” } } 返回值...

    java 面试题 总结

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是...

    Java入门教程(微学苑)-part1

    3.16 作为参数传递 51 3.17 Java方法重载 52 3.18 Java类的基本运行顺序 53 3.19 Java包装类、拆箱和装箱详解 54 3.20 包装类的应用 54 3.20.1.1 1) 实现 int 和 Integer 的相互转换 54 3.20.1.2 2) 将字符串转换为...

    java_类基础

    介绍java中类的基础知识、包括构造方法、方法、类的封装、java常用内库的说明及参数的传递

Global site tag (gtag.js) - Google Analytics