封装类与普通类的区别

1        封装类的好处

  1. 数据隐藏:通过封装,我们可以将类的内部实现细节隐藏起来,只暴露有限的接口。这样,外部代码就不能直接访问或修改类的内部状态,从而保证了数据的安全性和完整性。

  2. 数据保护:封装可以防止外部代码随意修改对象的内部状态,避免造成数据不一致或程序错误。

  3. 简化接口:封装让类的使用变得更加简单和直观。外部代码只需要通过提供的接口与对象交互,而不需要关心对象内部的复杂实现。

        在Java中,封装通常通过访问控制修饰符(如privatepublic等)来实现。比如,我们可以将类的成员变量设置为private,然后提供publicgettersetter方法来访问和修改这些变量。

2        区别

  1. 数据类型不同

    int a = 10; // 直接存储数值10
    Integer b = new Integer(10); // 存储的是对象的引用
    • int是基本数据类型,直接存储数值。

    • Integer是引用类型,实际上是一个对象,存储的是对象的引用(即地址)。

  2. 默认值不同

    • int的默认值是0。

    • Integer的默认值是null,因为它是一个对象,可以表示没有引用任何对象的状态。

  3. 存储方式不同

    • int直接存储在栈内存中。

    • Integer对象存储在堆内存中,栈内存中存储的是指向堆中对象的引用。

  4. 实例化方式不同

    // int不需要实例化
    int c = 5;
    // Integer需要实例化
    Integer d = new Integer(5);
    // 或者使用自动装箱
    Integer e = 5; // 相当于Integer e = Integer.valueOf(5);
    • int不需要实例化,直接声明即可使用。

    • Integer需要使用new关键字进行实例化,或者使用自动装箱机制(Autoboxing)来隐式创建对象。

  5. 比较方式不同

    Integer f = 1000;
    Integer g = 1000;
    System.out.println(f == g); // false,因为不是通过new创建的,但不在缓存范围内
    System.out.println(f.equals(g)); // true,比较内容
    
    Integer h = 127;
    Integer i = 127;
    System.out.println(h == i); // 可能为true,因为Java缓存了这个范围内的对象
    • int可以直接使用==来比较两个变量的值是否相等。

    • Integer需要使用equals()方法来比较两个对象的内容是否相等。但是,需要注意的是,对于-128到127之间的整数,Java会自动缓存这些范围的Integer对象,所以直接比较这些范围内的Integer对象时,使用==equals()结果相同。

  6. 泛型支持

    List<Integer> list = new ArrayList<>(); // 正确
    // List<int> list = new ArrayList<>(); // 错误,泛型不支持基本数据类型
    • 由于泛型不支持基本数据类型,所以在使用泛型集合时,需要使用Integer而不是int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值