`
junfeng2010
  • 浏览: 9261 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Java方法的参数是按值传递的.(转载)

阅读更多

在Java中,所有的方法参数,都是"按值传递".

有那么一种说法,Java中基本类型是按值传递,对象是按引用传递.这个说法其实是不确切的,确切的说法是

Java中基本类型将值作为参数,按值传递.对象将引用作为参数,按值传递.

所谓按值传递,就是传递的是一个副本.

 

现在来解释下Java方法传递引用时的情况.

比如说有一个引用 Body body = new Body(.....);

将body当作参数传递的时候,传递的不是body指向的对象,也不是body引用本身,而是body的一个副本,并且这个副本和body是一模一样.  这里的一模一样就是body和副本指向同一个对象.

那么当body的副本进入方法后,对这个副本的修改同样会影响body.

但是如果进入方法后将body的副本指向其它对象的时候,那么和body是一点关系都没有了.

下面来看看程序就明白了.

  1. public class TestParam { 
  2.     public static void main(String[] args) { 
  3.         Body var1 = new Body(1); 
  4.         Body var2 = var1; 
  5.         doSomething( var2 ); 
  6.         System.out.println( var1.a ); 
  7.         System.out.println(var2.a); 
  8.         System.out.print(var1 == var2); 
  9.     } 
  10.  
  11.     public static void doSomething(Body body) { 
  12.         body.a = 2
  13.     } 
  14. class Body { 
  15.     public Body(int a) { 
  16.         this.a = a; 
  17.     } 
  18.     int a; 

输出的结果是:

2
2
true

这个结果不难理解.

 

再看一个

  1. public class TestParam { 
  2.     public static void main(String[] args) { 
  3.         Body var1 = new Body(1); 
  4.         Body var2 = var1; 
  5.         doSomething( var2 ); 
  6.         System.out.println( var1.a ); 
  7.         System.out.println(var2.a); 
  8.         System.out.print(var1 == var2); 
  9.     } 
  10.  
  11.     public static void doSomething(Body body) { 
  12.         body = new Body(2); 
  13.     } 
  14. class Body { 
  15.     public Body(int a) { 
  16.         this.a = a; 
  17.     } 
  18.     int a; 

输出的结果是
1
1
true

 

 

两个程序就是在参数进入方法体之后的处理有所区别.

针对第二个程序,画一个草图.

 

 

本文出自 “Taming the JAVA” 博客,请务必保留此出处http://nileader.blog.51cto.com/1381108/303501

 

 

javascript 中数据类型的内存分配基本和java中的一样。

javascript 中的函数参数的传递也是按值传递的上述文章也适用。

写道
<script type='text/javascript'>
//<![CDATA[
var num1=4;//基本数据类型
var num2=num1;//拷备一份副本给num2(java中基本数据类型也是一样的)
num1=3;//num2不会受到影响
alert(num2);//结果是4
alert(num1);//结果是3
//]]>
</script>

  

 

分享到:
评论

相关推荐

    JNI完全技术手册 带完整书签

    Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载...

    JNI调用大全

    Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载).....

    java文件路径操作详细(转载)

    可以通过传递字符串参数给File构造器来创建一个File对象,例如`new File("C:\\Users\\User\\Documents\\file.txt")`。路径可以是绝对路径,也可以是相对路径。 3. **绝对路径与相对路径**: - **绝对路径**:完整...

    《Java-Web应用开发基础》综合练习3.docx

    6. JSP页面之间传递参数的方法有:Request对象、Session对象、Application对象、Cookie等。 7. Filter接口:Filter接口是Java Servlet规范中的一部分,主要用来过滤请求和响应。Filter接口有以下几个方法:init()、...

    Java程序员面试的试题集(1_122)帮助初学者的技术问题(转载)

    ### Java程序员面试试题详解 #### CORBA的理解与应用 CORBA,全称为Common Object Request Broker Architecture,即公共对象请求代理体系结构,是由Object Management Group(OMG)制定的一项标准。其核心目标在于...

    JDBC连接DB2数据库详解.doc--转载

    一种优化方法是在Servlet中创建连接,然后传递给JSP页面,这有助于代码的管理和性能提升。DB2连接速度变慢或服务器崩溃可能与DB2实例和数据库参数配置不当有关,需要进一步调整。 DB2 UDB支持多种应用程序开发方式...

    mybatis interceptor

    同时,也要更新 `BoundSql` 的参数映射,确保分页参数被正确传递。 4. **注册拦截器**:在 MyBatis 的配置文件 `mybatis-config.xml` 中,我们需要添加 `&lt;plugins&gt;` 标签来注册我们的拦截器。这样,每次 SQL 执行时...

    c#学习完全手册,适用于初学者

    委托是类型安全的函数指针,可以将方法作为参数传递,是实现事件处理的基础。 11. **.NET框架** C#是.NET框架的一部分,开发者可以利用.NET提供的丰富库和服务,如Windows Forms、WPF、ASP.NET等,快速构建各种...

    webwork教程webwork教程webwork教程

    它通过解析请求参数和路径信息,决定调用哪个Action方法,并且将结果传递给视图进行渲染。 **Action的单元测试** 为了确保Action的功能正确,WebWork提供了一套完善的单元测试支持。你可以使用JUnit或其他测试框架...

    jstl源代码,转载内容

    `&lt;sql:query&gt;`标签用于执行SQL查询,`&lt;sql:update&gt;`用于更新操作,`&lt;sql:param&gt;`则用于传递参数。 4. **Functions标签库**: 这个库包含了来自Commons Lang库的一些有用函数,可以增强JSP页面的表达能力,比如字符串...

    WebWork教程开发资料

    ActionContext是WebWork中传递请求参数、session状态和其他上下文信息的关键对象。它封装了请求和响应对象,为Action提供了一种访问当前请求环境的统一方式。 **ServletActionContext** ServletActionContext是...

    webwork中文教程

    WebWork 是一个基于Java的MVC(模型-视图-控制器)框架,它在J2EE平台上被广泛用于构建企业级Web应用。本教程旨在帮助开发者理解和掌握WebWork的核心概念和使用方法。 **WebWork 介绍** WebWork 是由Apache软件...

    webwork教程(经典)

    WebWork是一款基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中提供了强大的功能和灵活性。本教程旨在帮助开发者理解和掌握WebWork的核心概念和技术。 **一、WebWork介绍** WebWork是由Apache软件...

Global site tag (gtag.js) - Google Analytics