java入参怎么赋值false,Java赋值与传参时经常被忽视的有关问题

Java赋值与传参时经常被忽视的问题

今天看了Thinking in Java 3rd Edition有感,突然发现自己基本功好不扎实,依然停留在应用层的操作上,并没有真正的深入到底层看看,写段经常会忽视的问题吧——赋值,愿大家不要拍我哦!

package com.lj.test;

class Number{

int i;

}

public class Test {

public static void main(String[] args) {

Number n1 = new Number();

Number n2 = new Number();

n1.i = 9;

n2.i = 47;

System.out.println("1:n1.i="+n1.i+",n2.i="+n2.i);

n1 = n2;

System.out.println("2:n1.i="+n1.i+",n2.i="+n2.i);

n1.i = 27;

System.out.println("3:n1.i="+n1.i+",n2.i="+n2.i);

}

}

猜猜结果会是啥样呢?

1:n1.i=9,n2.i=47

2:n1.i=47,n2.i=47

3:n1.i=27,n2.i=27

开始我们实例化了两个对象n1和n2,并且对其i值都赋予相应的值。然后吧n2赋值给n1,再修改n1。在很多别的编程语言里,你可以设想n1和n2自始至终都是两个独立的对象。但在Java里面,对n1的修改会影响到n2!我们可以看出这时n1和n2使用同一块内存,而原来的n1对象所占用的内存则会被垃圾回收器清理掉。我个人认为,我们在赋值操作时经常会马虎的认为会输出结果:3:n1.i=27,n2.i=47。

下面我参考Thinking in Java 3rd Edition又做个了例子发现,在方法调用的时候,传递参数时也要注意:

package com.lj.test;

class Number{

int i;

}

public class Test {

public static void f(Number n){

n.i = 88;

}

public static void main(String[] args) {

Number n3 = new Number();

n3.i = 33;

System.out.println("n3.i:"+n3.i);

f(n3);

System.out.println("n3.i:"+n3.i);

}

}

输出结果为:

n3.i:33

n3.i:88

通过两个例子我总结一下吧,在基础类型的赋值时是对值的复制操作,而对对象的赋值则是内存地址引用操作(包括以对象为参数的也是内存地址的引用操作),当多个对象都引用了此内存地址时,其中任何一个对象发生改变 其他引用同一块内存的对象也会受到影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值