java给方法参数赋值_java方法参数的赋值问题实例源码介绍

java方法参数的赋值问题实例源码介绍。方法里面的所有变量,都是临时存在内存空间的,出了这个方法就不认识了。

传进去的参数,虽然实参是某个对象(的引用),而真正到了参数中,会变成与实参相同内存地址的一个引用。

换句话说,方法里面的参数,与实参(传入参数)仅仅是两个内存地址相同的引用!

方法前三个参数,分别是类的三个变量,方法第四个参数,实际上就是第一个参数。

当刚刚传入的时候,第一个参数==第二个参数==类变量

当执行完赋值后,第一个参数!=(第二个参数==类变量)

而数组字符串和字符,通过输出字符串数组的内存地址看,永远不变,所以说==可以成立。

问题出在,为什么给第一个参数赋值后,它就变了内存地址?

这是因为原先它的值为”abc”,当给它值值为”dbc”后,会在常量池中创建一个”dbc”对象,然后指向它。

就在这儿,第一个参数的内存地址就变了。由此可见,把”abc”改成”dbc”并非像我们想象的,只需把第一个字母改一下这么简单,

只要稍有变化,就会在常量池中再创建一个新对象,原对象不变,如果没有引用指向它,可能会被回收!

而第四个参数,由于给它赋值为”abc”,常量池中已经存在,所以不会新创建对象,所以始终指向它。

而数组,new一个才会在堆里面创建一个,所以,改变它的元素,不会影响到内存地址的改变。不管怎么改,始终是它。

有这么一个例子:

package wzq.j2se.claz;

public class FunMember {

String a = “abc”;

String[] b = {“a”,”b”,”c”};

char[] c = { ’1 ‘, ’2 ‘, ’3 ‘};

public static void main(String[] args) {

FunMember fm = new FunMember();

fm.change(fm.a, fm.b,fm.c,fm.a);

System.out.println(“————-main——–”);

System.out.println(fm.a);

System.out.println(fm.b);

System.out.println(fm.c);

System.out.println(fm.b[0]);

System.out.println(“————-main——–”);

}

public void change(String aa,String[] bb,char[] cc,String temp){

System.out.println(“————-change前——–”);

System.out.println(a==aa);

System.out.println(temp==aa);

System.out.println(temp==a);

System.out.println(a);

System.out.println(b);

System.out.println(c);

System.out.println(“————-change前——–”);

aa = “dbc”;

temp = “abc”;

bb[0] = “d”;

cc[0] = ’5 ‘;

System.out.println(“————-change后——–”);

System.out.println(a==aa);

System.out.println(temp==aa);

System.out.println(temp==a);

System.out.println(a);

System.out.println(b);

System.out.println(c);

System.out.println(“————-change后——–”);

}

}

输出:

————-change前——–

true

true

true

abc

[Ljava.lang.String;@de6ced

123

————-change前——–

————-change后——–

false

false

true

abc

[Ljava.lang.String;@de6ced

523

————-change后——–

————-main——–

abc

[Ljava.lang.String;@de6ced

523

d

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值