Java的参数传递的唯一方式:传值(By Value)(csdn)

原创 2005年05月26日 08:43:00

之所以把这个问题拿出来重新分析一次,是因为我们操作Java的对象(Object)全是通过对象的引用(Object references),引用可以理解为指针,容易让人对应到C++的传址上面去。讨论讨论有百益而无一害嘛。

在传基本数据类型 变量时,直接传值不会让人费解;但当传递对象时,就应该理解为传递的是对象引用的值,但这个值并不是对象本身,而是指向该对象,即你让另一个引用指向了该对象。

--Java以By Value的方式传递Object reference。

以下面简单程序为例:

package test;

public class BlogTest
{
    public void modifyAAA(int x, java.util.ArrayList list)
    {
        x += 5;
        System.out.println("x=====" + x);
        list.add(new java.util.Date());
        System.out.println(list.size());
    }

    public static void main(String[] args)
    {
        BlogTest blogtest = new BlogTest();
        int i = 5;
        java.util.ArrayList list = new java.util.ArrayList();
        System.out.println("i=======" + i);
        System.out.println("list.size()==="+list.size());
        blogtest.modifyAAA(i, list);
        System.out.println("i==new==" + i);
        System.out.println("list.size()====" + list.size());
    }
}
/*
运行得到的结果是这样的
i=======5
list.size()===0
x=====10
1
i==new==5
list.size()==new==1
*/

这说明在参数传递过程中发生了以下事情:int 变量 i 被复制了一份给 int  x,在modifyAAA()方法中改变了x的值并不会影响主函数中i的值,当然,这是变量生存区间不同,很好理解。但发现list对象的引用传到modifyAAA()方法的前后,主函数中的list也跟着发生了变化。这正说了在传递对象引用时,形参得到了实参对象的引用拷贝,两个引用都指向了同一list对象,所以形参改变了list同时也能反映到实参中来。

Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)

原文地址:http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html 在Java中,所有的对象变量都是引用,Java...
  • jubincn
  • jubincn
  • 2012年02月03日 22:56
  • 3972

Java只有一种参数传递方式,那就是传值

Java只有一种参数传递方式,那就是传值 当你问大多数程序员Java是传值还是传引用的时候,你可能会得到两种答案之一:(1)Java传递原始类型数据时使用的是传值方式;传递对象时则使用传引用方式...
  • wuha0
  • wuha0
  • 2011年12月19日 14:12
  • 2272

C/C++中参数传递有两种方式,传值或传地址(传引用)

C/C++中参数传递有两种方式,传值或传地址(传引用)
  • rryr2
  • rryr2
  • 2011年04月21日 03:16
  • 4420

C语言提高-第6讲: 参数传递方式(传值与传地址)

任务和代码: /* *All rights reserved *文件名称:main.c *作者: Osseyda 完成日期:2017.10.11 *版本号:v2. * *问题描述:认真...

C++中参数传递的两种方式:传值与传址及它们的区别

#include using namespace std; void mySwap(int *p1,int *p2); int main(){ int a=12; int b=44; int...

C++中参数传递的两种方式:传值与传址及它们的区别

#include using namespace std; void mySwap(int *p1,int *p2); int main(){ int a=12; int b=44; int...

关于Java对象作为参数传递是传值还是传引用的问题

前言  在Java中,当对象作为参数传递时,究竟传递的是对象的值,还是对象的引用,这是一个饱受争议的话题。若传的是值,那么函数接收的只是实参的一个副本,函数对形参的操作并不会对实参产生影响;若传的是引...

一个实例介绍——java中的参数传递(传值、传引用)

java的学习之路总是bup

C++ 传参时传内置类型时用传值(pass by value)方式效率较高

来源:唐磊的个人博客《C++ 传参时传内置类型时用传值(pass by value)方式效率较高》 在《Effective C++》里提到对内置(C-like)类型在函数传参时pass ...

java中关于参数传递问题的解释(传值与传引用的若干问题的解释)

首先解释解释一下,关于Java参数传递的一些个人看法。 其实不论是Java中的8中基本数据类型通过直接复制值的方式传递,还是其他类型(包括自定义类型)通过所谓的引用传递,都是通过传递一个值,就是一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java的参数传递的唯一方式:传值(By Value)(csdn)
举报原因:
原因补充:

(最多只允许输入30个字)