我们都知道,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参数传递的过程,引用传递,值传递
传递指定的参数建立websocket连接,并给指定的连接用户发送消息(包中有说明),代码中有注释,并附上调用代码
java调用.net的webservice传字符串参数,axis方式和xfire方式的使用说明及相关jar包。
Java方法的参数列是资讯传递的机制,可以从外面将资讯送入程序的黑盒子,参数列是方法的使用介面. 一个方法如果拥有参数列,在呼叫方法时,传入不同的参数就可以产生不同的执行结果. 4-3-2 类别方法的参数传递-范例 例如...
5.3 参数传递 5.4 匿名对象 5.5 习题 第6章 Java类的高级特性 6.1 访问权限 6.2 方法重载 6.3 构造方法 …… 第7章 继承、接口和包 第8章 系统常用类 第9章 异常处理 第10章 输入输出流与文件处理 第11章 简单GUI...
大家可以明显的看到,按指针传递参数可以方便的修改通过参数传递进来的值,而按值传递就不行。 当 Java 成长起来的时候,许多的 C 程序员开始转向学习 Java,他们发现,使用类似 SwapValue 的方法仍然不能改变...
提供查询java类,方法的说明!具体函数的说明,传递参数及返回类型!
写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用传递参数,以避免因依赖“按引用传递”这一行为而导致的常见编程错误。 对此节选的某些反馈意见认为,我把这一问题搞糊涂了,或者将它完全搞错了。...
提供查询java类,方法的说明!具体函数的说明,传递参数及返回类型!
消息是以参数的形式传递给某方法的。一个消息通常由三部分组成: 1. 消息传送到对象的名称。 2. 要执行的方法的名称。 3. 方法需要的任意参数。 2.2.4 类 类是一个蓝图或样板,定义了某种类型的所有对象的变量...
Java基础 只是一个简单的类,说明如何调用方法,如何将参数传递给方法,方法如何返回值:)
使用java调用matlab 详细代码示例说明以及用java调用matlab数学函数库参数的传递等,包含架包文件,可以直接运行使用,该代码仅供参考。
一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...
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 ...
本文详解说明了RestTemplate post传递参数时报错的问题及其原由,需要的朋友可以参考下
传递参数: 参数ID 中文名称 说明 示例 deviceCode 机器码(唯一) 1 返回值: { “code”:1, “msg”:”操作成功”, “data”:{ “deviceFileId”:”设备编号”, “deviceName”:”设备名称(仓库名称)” } } 返回值...
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是...
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常用内库的说明及参数的传递