`

再论Java中的传递方法

    博客分类:
  • Java
阅读更多
传递这个概念对于我们这些Java的初学者来说一度是很纠结的问题,今天把我自己的总结拿出来,希望与所有的朋友分享。

有的人说,在Java中只有一种传递方式,那就是值传递,因为我们一直所谓的引用传递其实也是在传递一个“地址”的值,这样的理解,我觉得我没有什么错,但我们还是要再学习中有机的区分这两种不同的形式,以达到我们学习的目的。

方法调用时,实参把它的值传递给对应的形参,方法执行中形参值的改变不影响实参的值————这就是我们的值传递。

方法调用时,实参的引用(地址,而不是参数的值)被传递给方法中相对应的形参,在方法执行中,对形参的操作实际上就是对实参的操作,方法执行中形参值的改变将会影响实参的值————这是所谓的引用传递。

其实,理解了程序在内存中的运行方式,再去回头看着两种方法兼职就是轻而易举的事情。

传递中,值传递适用于Java的基本数据类型和String类型,而引用传递适用于Java中的引用类型也就是类类型,说的更为通俗一些,就是将某一对象作为参数来传递,这也是我们命名其为引用的含义之所在。

下面具体举例说明:
值传递:
public class PassValue{
    static void exchange(int a, int b){
    //静态方法,交换a,b的值
        int temp;
        temp = a;
        a = b;
        b = temp;
    }
    public static void main(String[] args){
       int i = 10;
       int j = 100;
       System.out.println("before call: " + "i=" + i + "\t" + "j = " + j);//调用前
        exchange(i, j);                                                                    //值传递,main方法只能调用静态方法
        System.out.println("after call: " + "i=" + i + "\t" + "j = " + j);//调用后
    }
}
那么,运行结果呢?(先自己想一下哦)


before call:i=10 j=100
after call:i=10 j=100

其实很简单,在调用exchange(i,j)时,实参i,j分别把值传递给相应的形参a,b,在执行方法exchange()时,形式参数a,b的值的改变不影响实际参数i和j的值,i和j的值在调用前后并没改变。

引用传递:
class Book{
    String name;
    private folat price;
    Book(String n,float p){                //构造方法
        name = n;
        price = p;
    }
    static  void  change(Book a_book,    String n,    float p){    //静态方法,对象作为参数
            a_book.name = n;
            a_book.price = p;
    }
    public void output(){        //输出对象信息
        System.out.println("name: " + name + "\t" + "price: " + price);
    }
}
public class PassAddr{
    public static void main(String [] args){
        Book b = new Book("java2",    32.5f);
        System.out.print("before call:\t");        //调用前
        b.output();
        b.change(b,    "c++",    45.5f);            //引用传递,传递对象b的引用,修改对象b的值
        System.out.print("after call:\t");            //调用后
        b.output();
    }
}

这个结果也是显而易见的:
before call:name:java2 price:32.5
after call:name:c++ price:45.5

在这里就如同我在上面讲到的,调用change(b,"c++",45.5f)时,对象b作为实际参数,把引用传递给相应的形式参数a_book,实际上a_book也指向同一个对象,即该对象有两个引用名:b和a_book。在执行方法change()时,对形式参数a_book操作就是对实际参数b的操作。

这就是Java中的传递方式了,这里我要说明的一点是:希望深刻理解一门编程语言的童鞋,基础最重要,对底层程序德尔运行模式的理解也不容忽视,李开复就说过这样一句话:

“你能在IT行业走多远,就看你能将程序在系统和内存中的每一步运行理解的多深刻。”
0
4
分享到:
评论

相关推荐

    Java编程方法论 之 Spring Reactor Reactor-Netty Spring Webflux 全面解读.pdf

    Java编程方法论中,Spring Reactor、Reactor-Netty和Spring Webflux是现代Java开发中用于构建反应式应用程序的关键组件。Spring Reactor是响应式流(Reactive Streams)规范的实现,它提供了用于处理异步事件和数据...

    JAVA语言中参数传递的深入剖析.pdf

    因此,在Java语言中参数传递机制的实现方法可以分为两种情况,即按值传递和引用传递。了解Java语言中参数传递机制的原理对于初学者来说非常重要,可以帮助他们更好地理解Java语言的工作机制。 Java语言中参数传递...

    聊天室 Java EE编程技术论文

    在数据流的操作设计中,论文强调了合理的信息传递、接收和数据保存机制,这确保了聊天记录的完整性和实时性。 为了实现聊天室的多用户并发功能,论文采用了多线程和多任务的设计思想。多线程允许服务器同时处理多个...

    浅谈Java中方法的参数传值.pdf

    Java方法参数传值是Java编程中的基础知识点,涉及变量、数据类型和方法调用的机制。在Java中,数据类型分为基本数据类型和引用数据类型。基本数据类型包括布尔型(boolean)、字节型(byte)、短整型(short)、整型...

    网上花店系统java(附带数据库。论文)

    在本系统中,Javabean作为数据容器,封装了业务逻辑和数据属性,方便在JSP和Servlet之间传递数据。 4. **Servlet**:Servlet是Java Web开发中的服务器端组件,用于接收和响应HTTP请求。在这个网上花店系统中,...

    基于java的聊天系统的设计于实现(系统+论文)

    2. "jsp":JavaServer Pages(JSP)是Java Web开发中的一个重要技术,用于动态生成网页内容,可能用于聊天系统的用户界面部分。 3. "聊天":系统的核心功能,涉及实时通信和消息传递。 4. "论文":可能包含项目的...

    基于Java的视频会议系统(软件程序+WORD论文文档).zip

    在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上...

    基于Java Reflection自动逆向生成类间方法关系图的解析器.pdf

    知识点详细说明: 一、反射机制(Java Reflection) Java Reflection是Java...借助Java反射机制和Javassist等工具,可以有效地建立类方法关系图,并进一步扩展为软件错误传递图,以助于快速定位和解决软件中的故障。

    java基础理论论习题

    方法是实现程序功能的基本单元,包括参数传递、返回值、重载等概念。通过"Java初学者习题20道.doc",你可以深入实践这些方法的运用。 5. **面向对象编程** Java是面向对象的语言,因此封装、继承和多态是其核心...

    jsp ssh mvc java web j2ee网络商城+论文+源码 购物系统网页设计

    7. J2EE平台:EJB(Enterprise JavaBeans)的类型,JMS(Java Message Service)消息传递,JTA(Java Transaction API)事务管理,以及JNDI(Java Naming and Directory Interface)服务。 8. 网络商城系统设计:...

    论构造方法的方法论.zip

    在IT行业中,构造方法是面向对象编程中的一个关键概念,特别是在Java、C#等语言中。这个概念对于理解和实现类的实例化至关重要。"论构造方法的方法论.zip"的文件标题暗示了这是一个深入探讨构造方法设计策略的资源,...

    Thinking in Java 中文第四版+习题答案

    8.4.5 再论枚举器 8.5 排序 8.6 通用集合库 8.7 新集合 8.7.1 使用 8.7.2 使用 8.7.3 使用 8.7.4 使用 8.7.5 决定实施方案 8.7.6 未支持的操作 8.7.7 排序和搜索 8.7.8 实用工具 8.8 总结 8.9 练习 第9章 违例差错...

    Thinking in Java简体中文(全)

    8.4.5 再论枚举器 8.5 排序 8.6 通用集合库 8.7 新集合 8.7.1 使用Collections 8.7.2 使用Lists 8.7.3 使用Sets 8.7.4 使用Maps 8.7.5 决定实施方案 8.7.6 未支持的操作 8.7.7 排序和搜索 8.7.8 实用工具 8.8 总结 ...

    java联想(中文)

    8.4.5 再论枚举器 8.5 排序 8.6 通用集合库 8.7 新集合 8.7.1 使用Collections 8.7.2 使用Lists 8.7.3 使用Sets 8.7.4 使用Maps 8.7.5 决定实施方案 8.7.6 未支持的操作 8.7.7 排序和搜索 8.7.8 实用工具 8.8 总结 ...

Global site tag (gtag.js) - Google Analytics