JAVA编程:方法调用传对象参数

下面是2个测试,分别测试可修改的Object和不可修改的

/**
* JAVA里面对象参数的陷阱
*
* @author 老紫竹的家(laozizhu.com)
*
*/
public class Test {
public static void main(String[] args) {
TestValue tv = new TestValue();
tv.first();
TestInteger ti = new TestInteger();
ti.first();
}
}
class TestValue {
class Value {
public int i = 15;
}
// 初始化
Value v = new Value();
public void first() {
// 当然是15
System.out.println(v.i);
// 第一次调用
second(v);
System.out.println(v.i);
third(v);
System.out.println(v.i);
}
public void second(Value v) {
// 此时这里的v是一个局部变量
// 和类属性的v相等
System.out.println(v == this.v);
v.i = 20;
}
public void third(Value v) {
// 重新设置一个对象
v = new Value();
// 此时这里的v也是一个局部变量
// 但和类属性的v已经不相等了
// 修改这个v指向对象的数值,已经不影响类里面的属性v了。
System.out.println(v == this.v);
v.i = 25;
}
}
class TestInteger {
// 初始化
Integer v = new Integer(15);
public void first() {
// 当然是15
System.out.println(v);
// 第一次调用
second(v);
System.out.println(v);
third(v);
System.out.println(v);
}
public void second(Integer v) {
// 此时这里的v是一个局部变量
// 和类属性的v相等
System.out.println(v == this.v);
// 但这一句和前面的不同,虽然也是给引用赋值,但因为Integer是不可修改的
// 所以这里会生成一个新的对象。
v = 20;
// 当然,他们也不再相等
System.out.println(v == this.v);
}
public void third(Integer v) {
// 重新设置一个对象
v = new Integer(25);
// 此时这里的v也是一个局部变量
// 但和类属性的v已经不相等了
// 修改这个v指向对象的数值,已经不影响类里面的属性v了。
System.out.println(v == this.v);
}
}

运行结果

15
true
20
false
20
15
true
false
15
false
15

希望这个例子能解开一些初学者的疑问。

时间: 2024-11-30 09:18:11

JAVA编程:方法调用传对象参数的相关文章

java基础-java方法调用和对象比较问题

问题描述 java方法调用和对象比较问题 public int compare(Posen o1, Posen o2) { int num = o1.getName().compareTo(o2.getName());这句话是什么意思? if(num==0) { return new Integer(o1.getAge()).compareTo(o2.getAge()); return num; } 解决方案 compareTo是String的一个方法,按照长度文字排序等返回大于0小于0和等于0

java 中方法调用的奇怪问题

问题描述 java 中方法调用的奇怪问题 public class Test { /** * @param args */ public static void main(String[] args) { List<String> lista = new ArrayList<String>(); List<String> listb = new ArrayList<String>(); Test tt = new Test(); listb.add(&quo

struct2框架jsp页面传对象参数到action中失败

问题描述 struct2框架jsp页面传对象参数到action中失败 jsp页面对象方式传参进action中,在action中定义了getter.setter方法,但是还是取不到值!结果: 解决方案 set和get方法是你自己写的还是自动生成的,,写的有问题,,setFlower()和getFlower(),,这样才行 解决方案二: 你的name和action中的字段对不上啊页面上写这个flower.goodsId前面有一个子对象是flower 所以action中要有一个子对象 是flower和

求给力-Java编程如何调用指定文件夹中的图片

问题描述 Java编程如何调用指定文件夹中的图片 ImageIcon如何调用指定文件夹中的图片?就是我想把图片都放在同一个文件夹中!

求助一个问题如何在onclick事件中传对象参数

问题描述 我在做项目中碰到一个问题如下:<ahref="javascript:;"onclick="loadData(user)">显示全部用户</a>user是通过dwr得到的json数组,loadData()是用来把全部用户显示出来的.user的格式是user=[{id:1,username:nwl},{id:2,username:zs}]问题是user怎么入loadData中,出错提示少"]". 解决方案 解决方案二

详解Java编程中Annotation注解对象的使用方法_java

注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据.  1.基本语法Java SE5内置三种标准注解 @Override:表示当前的方法定义将覆盖超类中的方法.如果你不小心拼写错误,或者方法签名对不上被覆 盖的方法,编译器就会发出错误提示 @Deprecated:如果程序员使用了注解为它的元素,那么编译器就会发出警告信息 @SupperessWarnings:关闭不当的编译器警告信息. Java SE5内置四种元注解 @Target

深入解析Java编程中的boolean对象的运用_java

只能是true或false两个值之一的变量就是布尔(boolean)类型变量,true和false是布尔型直接量.你可以用下面的语句定义一个名称为state的布尔型变量: boolean state=true     该语句用true值对变量state进行了初始化.你也可以使用赋值语句为一个boolean型变量赋值.例如,语句, state=false     设置变量state的值为false.     目前,我们除了为布尔变量赋值外,还不能进行更多的操作,但正像你在下一章中将要看到的,布尔型

Java编程那些事儿60——对象

对象(Object)是面向对象技术的核心,按照面向对象的思考方式,现实中的每个实体都是一个对象,比如一个人.数据库中的一张表等,总结起来,就是面向对象技术中的经典语句--万事万物皆对象. 8.3.1 什么是对象? 其实面向对象技术只是提供了一种思考的方式,其思考方式就是把一个复杂的结构看成是一个整体,这样可以降低认知的复杂性.比如认识一个电脑,按照面向对象的认知方式,就是先把电脑分成一个个的对象:显示器对象.硬盘对象.CPU对象等等,然后再一个一个的进行认知. 同时面向对象技术也是一种设计方式,

java编程小说上传-java语言编程小说的上传模块不会做了,请指点

问题描述 java语言编程小说的上传模块不会做了,请指点 用java语言在编程小说的上传功能出现了问题,还请问下一步咋搞? 解决方案 报错的是什么部分错误代码帖出来,上传可以找些io方面的看看 解决方案二: 错误的地方会有信息,可以看看 解决方案三: novel没定义,还是外面定义好了,没传参进来?