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

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

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

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

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

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

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

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

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

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

public class TestParam {
public static void main(String[] args) {
Body var1 = new Body(1);
Body var2 = var1;
doSomething( var2 );
System.out.println( var1.a );
System.out.println(var2.a);
System.out.print(var1 == var2);
} public static void doSomething(Body body) {
body.a = 2;
}
}
class Body {
public Body(int a) {
this.a = a;
}
int a;
}

输出的结果是:

2
2
true

这个结果不难理解.

public class TestParam {
public static void main(String[] args) {
Body var1 = new Body(1);
Body var2 = var1;
doSomething( var2 );
System.out.println( var1.a );
System.out.println(var2.a);
System.out.print(var1 == var2);
} public static void doSomething(Body body) {
body = new Body(2);
}
}
class Body {
public Body(int a) {
this.a = a;
}
int a;
}

输出的结果是
1
1
true

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

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

文章来源:http://nileader.blog.51cto.com/1381108/303501

Java方法的参数是按值传递的.【转】的更多相关文章

  1. Java方法的参数传递方式为: 值传递

    Java方法的参数传递方式为: 值传递 对于基本数据类型作为参数传递时, 是"按值传递", 这点都认识很清楚. 但是, 当对象或者说引用作为参数传递, Java 的参数传递方式是& ...

  2. Java方法传递参数传值还是传址的问题

    这几天重构项目代码遇到一个疑问:可不可以在方法A中定义一个boolean变量b为false,然后A调用方法C把b传递到C方法中经过一些列业务判断后修改为true,C执行结束后A方法中b的值还是原来的f ...

  3. JAVA方法中参数到底是值传递还是引用传递

    当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是值传递还是引用传递? 答:是值传递.Java 语言的参数传递只有值传递.当一个实例对象作为参数被传递到方法中时,参 ...

  4. 关于Java方法的参数

    刚好看到C++的函数这块,说C++中除了引用类型的形参,其他都是实参的副本(个人总结). 隐约记得Java中方法的参数也是这么回事,于是手动测试一番. 结果 Java中方法的参数都是值传递,哪怕是引用 ...

  5. Java - 方法的参数声明

    给方法的参数加上限制是很常见的,比如参数代表索引时不能为负数.对于某个关键对象引用不能为null,否则会进行一些处理,比如抛出相应的异常信息. 对于这些参数限制,方法的提供者必须在文档中注明,并且在方 ...

  6. java方法可变参数研究

    1 问题引出 (1)缘由 最近在研究如何在项目中引入Redis缓存,于是遇到可变参数这个疑惑点,之前没有好好研究过,为了避免项目后期出现问题. (2)项目相关技术 SpringBoot Redis K ...

  7. java方法可变参数的写法

    jdk1.5之后出现的,该写法避免了当有多个不同个数的参数方法时,对方法的重载.其实就是数组. package com.shipin; /** * @author QiaoJiafei * @vers ...

  8. JAVA方法传递参数:传值?传引用?

    先来看下面这三段代码: //Example1: public class Example1 { static void check(int a) { a++; } public static void ...

  9. java方法---可变参数

    可变参数 在方法的声明中,在指定参数类型后面加一个...(省略号) 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通参数必须在它之前声明:

随机推荐

  1. BZOJ 1009 GT考试

    Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...

  2. Can deep learning help you find the perfect girl?

    Can deep learning help you find the perfect girl? One of the first things I did when I moved to Mont ...

  3. codeforces C. Inna and Huge Candy Matrix

    http://codeforces.com/problemset/problem/400/C 题意:给你一个n*m的矩阵,然后在矩阵中有p个糖果,给你每个糖果的初始位置,然后经过x次顺时针反转,y次旋 ...

  4. 我的VSTO之路(四):深入介绍Word开发

    原文:我的VSTO之路(四):深入介绍Word开发 在上一篇文章中,我介绍了Word的对象模型和一些基本开发技巧.为了更好的介绍Word插件开发,我为本文制作了一个Word书签的增强版,具体功能是让用 ...

  5. List、Set、 数组等转字符串

    public class Test { public static void main(String[] args) { String str = ""; // list转字符串 ...

  6. Lua table使用

    days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Th ...

  7. 【HDOJ】2371 Decode the Strings

    快速矩阵乘法.注意,原始字符串即为decode后的字符串.题目是要找到原始串. #include <cstdio> #include <cstring> #define MAX ...

  8. stat~~~访问文件状态的利器

    Name stat, fstat, lstat - get file status Synopsis #include <sys/types.h>#include <sys/stat ...

  9. Qt入门(10)——调试技术

    命令行参数当你运行Qt程序时,你可以指定几个命令行参数来帮助你调试.-nograb 应用程序不再捕获鼠标或者键盘.当程序在Linux下运行在gdb调试器中时这个选项是默认的.-dograb 忽略任何隐 ...

  10. 字符串(后缀自动机):USACO Dec10 恐吓信

    [题目描述] FJ刚刚和邻居发生了一场可怕的争吵,他咽不下这口气,决定佚名发给他的邻居一封脏话连篇的信.他有无限张完全相同的已经打印好的信件,都包含 N个字母(1<=N<=50,000). ...