Java学习DAY7~引用~2020.12.25

Java学习DAY7——引用

1. 什么是引用(reference)和对象(object)

int[] arr = {1,3,4,5,6,7,8,9,2};
  • 这里的 arr 是一个 int[ ] 类型的引用;指向了一个元素类型是 int 的数组类型对象
  • 关系
    在这里插入图片描述
 String a = "hello world";
  • 这里的 a 是一个字符串类型的引用;指向一个元素类型是 String 类型的对象
  • 关系:

在这里插入图片描述

在这里插入图片描述

2.引用指向对象的规则

  • 只有引用指向对象。没有对象指向引用,也没有引用指向引用,更没有对象指向对象。

  • 对象可以被多个引用指向。

    int a = 2;//JVM开辟出一块 内存空间(假如是0x100)
    //存放对象 2 ,然后把对象 2 的地址赋值给了 a 这个引用。
    int b = a;//让 b 指向目前 a 指向的对象

a 是一个 int 类型的引用,指向了一个元素类型是 int 的对象 2.
b 也是一个 int 类型的引用,也指向了一个元素类型是 int 的对象 2.
在这里插入图片描述

  • 操作引用其实是在操作引用指向的对象。
    int a = 2;
    int sum = a + a;

对引用 a 操作,其实是对 a 指向的对象 2 进行操作。

3. null 的理解

int[] a = null;// a 不指向任何对象

这种情况称为 a 等于空,或者 a 等于 null ,意思是 a 不指向任何对象。

4.引用的比较操作符

引用的相等与不等比较,是比较两个引用是否指向同一个对象。

  • 代码示例:
public class test1220{
    public static void main(String[] args) {
        int[] a={1,2,3,4};
        int[] b={1,2,3,4};
        if( a==b) {
            System.out.println(true);
        }else {
            System.out.println(false);;
        }
    }
}

结果:
在这里插入图片描述

  • 解析:
    在这里插入图片描述
    内存中如下:
    在这里插入图片描述
    a 和 b 分别指向两个不同的对象,所以结果是 false.

5.引用的 . 操作符

  int[] a = {1,2,3,4};
  System.out.println(a.length);//获取 a 指向的数组对象长度

“.” 操作符可以理解为“的”,通过引用 a 访问对象。

6. 数组类型引用的 [ ] 操作符

  int[] b={1,2,3,4};
  System.out.println(b[0]);//获取 b 指向的数组对象的第一个元素

只有数组引用才支持 [ ] 操作符

7. 通过引用操作对象表现出共享的特性

7.1 通过赋值表现

    int a = {1,23,4};
    int b = a;//让 b 指向目前 a 指向的对象

在这里插入图片描述

7.2 通过方法传参表现

import java.util.Arrays;
public class test1220{
    public static void main(String[] args) {
    int[] a = { 1, 2, 3, 4, 5 };
   System.out.println(Arrays.toString(a)); // [1, 2, 3, 4, 5]
   method(a);
   System.out.println(Arrays.toString(a)); // [100, 2, 3, 4, 5]
    }
    public static void method(int[] b) {
    System.out.println(Arrays.toString(b)); // [1, 2, 3, 4, 5]
    b[0] = 100;
   System.out.println(Arrays.toString(b)); // [100, 2, 3, 4, 5]
    }
}

在这里插入图片描述
通过方法传递参数,其实也是让 b 指向 a 目前指向的对象,然后做修改,体现出“共享”的特性。

8. NullPointerException异常

NullPointerException常被翻译为空指针异常,但这里的指针和我们 C 语言的指针毫无关系。
已知,在对一个引用做 . 或者 [ ] 操作的时候,就是需要通过引用操作,引用指向的对象。
如果有 一个 引用 == null,则表示该引用没有指向任何对象。
则此时在对该引用使用 . 或者 [ ] 操作符,就会抛出 NullPointerException 了。
接下来,我们通过代码,看 java 出现 NullPointerException 的常见形式。

  • 通过 “引用 . 某某某”,进行解引用操作
        int[] arr = null;
        System.out.println(arr.length);

结果:
在这里插入图片描述
这里就是要对 arr 这个引用做解引用动作时,由于 arr 是空,所以出现了异常。

  • 通过“引用[下标]”进行解引用操作
     int[] arr = null;
        System.out.println(arr[0]);

结果:
在这里插入图片描述
这里就是要对 arr 这个引用做解引用动作时,由于 arr 是空,所以出现了异常。

小结

  1. 引用是一种数据类型,用来指向对象。
  2. 对引用进行的大部分操作实际上都是操作的该引用指向的对象。
  3. 当多个引用指向同一个对象时,通过哪个引用修改了对象,其他引用都可以看到变化
  4. 当一个引用不指向对象时,要求访问其指向的对象,就会遇到 NullPointerException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值