[有趣] 关于一条有意思的代码--------成员变量与局部变量

今天看到了一条代码,感觉很有意思,也正好小庆一下我的博客有博文了,今天是值得纪念的一天,未来的我会为现在的我感到自豪,话不多说。



public class Fascinating {
    String no1 = new String("rejoice");
    char[] ch = { 'x', 'y', 'z' };
    
    public void reception(String no1, char ch[]) {
	no1 = "displeasure";
	ch[0] = 'a';
    }

    public static void main(String args[]) {
	Fascinating fg = new Fascinating();
	fg.reception(fg.no1, fg.ch);
	System.out.println(fg.no1);
	System.out.println(fg.ch);
    }

}

就当这是一道题吧

就问no1 与 ch的值为多少.

A.displeasure  ayz

B.rejoice   x

C.rejoice   ayz

D.displeasure  x




这条代码主要有两个知识点,一个是关于类的成员变量与局部变量的关系,另一个是关于数组在方法里的调用,


首先,我们要知道成员变量是在类里声明的,其他方法可以直接调用,不需要在方法里声明,其次成员变量可以与局部变量重名,但优先级是方法里声明的变量优先级大于类里的成员变量(重点前提是同名)。



这条代码的重点是主方法调用了成员变量i并传给了reception,之后再打印no1,可以看到,结果no1打印出来的还是原值”rejoice”,这里就涉及到内存问题

局部变量在调取成员变量时,内存会分配新的存储空间将成员变量的值复制进来.

简单的说就是在方法内声明一个与成员变量名字相同值相同的变量。

所以reception方法并没有改变成员变量no1的值

reception方法只是改变了自身方法内no1的值

所以在这里如果输出reception方法里的no1的话是会打印出displeasure的




但是同样是在同一个方法内,为什么数组ch里的值却改变了,

数组在方法里调用方式不同,方法内数组的调用是将指针直接指向成员变量里的数组,也就是说方法内的数组与成员变量里的数组用同样的值,指针都指向成员变量里的值,不存在上面的”复制”,所以在打印时会将’a’替换’x’.

主要的问题就是数组在方法里的调用与其他类型不同


所以

no1 :  rejoice

ch    :   ayz



感觉这样的代码如果基础打的不是很牢固的话是很容易弄混.

最后

可能注意到我直接打印出了数组ch,并没有给数组下标,这里也十分有趣,要注意我声明的数组为char数组,因为println()方法的重载,会直接打印出char内的每个值,并不用遍历.

我认为这段代码很有意义,很有代表性,涉及的知识点也比较多,总之还是要多练多看.


如果有人发现我写的有什么错误,请指出,我会及时更改.

我现在准备养成三天一小写,一周一大写,多多练习。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张德仁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值