Java基础漏洞(三)

复习一些Java基础,填补自己的知识漏洞。

1.值引用和地址引用

(1)值引用

由下面程序:定义两个变量n1和n2,将n1的值的值赋给n2,然后修改n2的值,但n1不受影响,因为n1和n2之间只是值引用。

(2)地址引用

定义两个数组arr1和arr2,把arr1赋值给arr2,修改arr2,arr1的值也会改变,arr2在内存空间中指向一个地址,但int []arr2=arr1这条程序把arr2的指向修改了,arr2指向arr1的地址,所以当arr2修改的时候,arr1也会改变,因为它们指向的是同一块地址。

2.数组的拷贝

这里和上一点是异曲同工之妙,假设我们想把一个数组的值拷贝给另一个数组,我们会怎么做。

错误做法:

假如我们像下图一样,直接把第一个数组赋值给第二个数组,这样做就是地址引用,这样修改第二个数组的值时,则第一个数组的值也会改变。

正确做法:

利用值引用而并非地址引用

3.数组的扩容、缩减

(1)扩容

当我们定义了一个数组后无法改变长度,但我们可以利用地址引用,先定义一个新的数组,把新数组的长度定义成所需长度,把原来数组的值拷贝过去,然后利用地址引用把原来数组的地址指向新的地址。

 (2)缩减

和上面扩容一样,同理可得。

 4.二维数组的内存储存

假如定义一个二维数组int[2][3] arr ,那么它在内存当中大概是这样储存的,假设arr在堆中会指向一个地址0x0011,然后0x0011会指向堆中的一块空间,这块空间储存的是0x0022、0x0033两个地址,而0x0022和0x0033则分别指向一维数组arr[0]和arr[1],0x0022和0x0033才是储存具体数据的地方。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值