经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java常用类——包装类 小白版个人推荐
来源:cnblogs  作者:椰椰210162701037  时间:2024/8/20 8:59:07  对本文有异议

包装类及自动装箱/拆箱

包装类是将Java中的八种基本数据类型封装成的类,所有数据类型都能很方便地与对应的包装类相互转换,以解决应用中要求使用数据类型,而不能使用基本数据类型的情况。

  1. int a = 10; //基本类型的数据
  2. Integer b = new Integer(10); //包装类表示的数据

包装类的特点

  • 所有包装类都是final类型(不能派生子类);
  • 实例化包装类对象后,对象中保存的基本类型数据不能再改变;
  • 包装类封装大量有用的方法(如数据类型转换、判断大小写、最大值、最小值等);
  • 除Character类和Boolean类继承于Object类,其他的包装类都继承于Number类。

基本数据类型和包装类

基本数据类型 包装类
boolean Boolean类
byte Byte类
short Short类
int Integer类
long Long类
char Charactor类
float Float类
double Double类

包装类的共同点

  1. 包装类中包含的值不改变( 包装类实例化后不能修改保存的值 );
  2. 包装类有两个构造器
    • Integer(int value) ---指定int值的构造对象
    • Integer(String s) ---指定String值的构造对象
  3. 包装类中都有xxxValue()方法
    • int intValue() ---返回包装类对象的int值
    • float floatValue() ---返回包装类对象的float值
  4. 包装类中都有两个ValueOf()方法
    • static Integer valueOf(int i) ---指定int值的Integer实例
    • static Integer valueOf(String s) ---指定String值的Integer实例

自动装箱和拆箱

自动装箱和自动拆箱是基本数据类型与包装类之间的转换机制(通过编译器自动完成)
基本数据类型 ---自动装箱--->包装类;
包装类 ---自动拆箱 --->基本数据类型。
例:以int类型和Integer类型为例

  1. public class Test01 {
  2. public static void main(String[] args) {
  3. // 自动装箱 int -> Integer
  4. int i = 10;
  5. Integer integer1 = i;
  6. System.out.println(integer1);
  7. //自动拆箱 Integer -> int
  8. int j = 20;
  9. Integer integer2=j;
  10. int k = integer2;
  11. System.out.println(j);
  12. }
  13. }

包装类型和String类型的相互转换

例:以 Integer 和 String 为例

  1. public class Test03 {
  2. public static void main(String[] args) {
  3. //包装类Integer -> String
  4. Integer i = 100; //自动装箱
  5. //方式1
  6. String str1 = i+"";
  7. //方式2 调用Integer的toString()方法
  8. String str2 = i.toString();
  9. //方式3 调用静态方法String.valueOf()
  10. String str3 =String.valueOf(i);
  11. System.out.println(str1);
  12. System.out.println(str2);
  13. System.out.println(str3);
  14. //String -> 包装类Integer
  15. String str4 = "123";
  16. //方式1 调用包装类的parseXXX()方法
  17. Integer i2 = Integer.parseInt(str4);//自动拆箱
  18. //方式2
  19. Integer i3 = new Integer(str4); //构造器
  20. System.out.println(i2);
  21. System.out.println(i3);
  22. }
  23. }

例题1:
以下两个题目输出结果相同吗?为什么?

  1. Object obj1 = true?new Integer(1):new Double(2.0); //三元运算符(是一个整体)
  2. System.out.println(obj1);
  3. //运行结果
  4. // 三元运算符是一个整体,精度最高的是double,所以结果是1.0
  5. 1.0
  1. Object obj2;
  2. if(true){
  3. obj2 = new Integer(1);
  4. }else{
  5. obj2 = new Double(2.0);
  6. }
  7. System.out.println(obj2);
  8. //运行结果
  9. //if、else是分别独立的语句,是什么输出什么
  10. 1

例题2(Integer类):

  1. public class Test04 {
  2. public static void main(String[] args) {
  3. Integer i1 = new Integer(10);
  4. Integer i2 = new Integer(10);
  5. System.out.println(i1 == i2); // false (判断i1和i2是否指向同一个对象)
  6. System.out.println(i1.equals(i2)); // true
  7. Integer j1 = 20; //底层 Integer.valueOf(20) {-128~127}直接返回对象引用,否则创建新的对象new Integer()
  8. Integer j2 = 20; //底层 Integer.valueOf(20)
  9. System.out.println(j1 == j2); // true
  10. Integer k1 = 128; //超出{-128~127}范围,创建新的对象new Integer()
  11. Integer k2 = 128;
  12. System.out.println(k1 == k2); // false (判断k1和k2是否指向同一个对象)
  13. }
  14. }

例题3(Integer):

  1. public class Test05 {
  2. public static void main(String[] args) {
  3. Integer i1 = new Integer(127);
  4. Integer i2 = new Integer(127);
  5. System.out.println(i1 == i2); // false i1和i2是两个不同的对象
  6. Integer i3 = new Integer(128);
  7. Integer i4 = new Integer(128);
  8. System.out.println(i3 == i4); // false i3和i4是两个不同的对象
  9. Integer i5 = 127; //底层Integer.valueOf(127)
  10. Integer i6 = 127;
  11. System.out.println(i5 == i6); // true
  12. Integer i7 = 128; //底层new Integer(128)
  13. Integer i8 = 128;
  14. System.out.println(i7 == i8); // false 同i3和i4
  15. Integer i9 = 127;
  16. Integer i10 = new Integer(127);
  17. System.out.println(i9 == i10); // false
  18. int a1 = 127;
  19. Integer b1 = 127;
  20. System.out.println(a1 == b1); // true 只要有基本数据类型,判断的是值是否相等,不管是int还是Integer
  21. int a2 = 128;
  22. Integer b2 = 128;
  23. System.out.println(a2 == b2); // true 同上
  24. }
  25. }

很多知识来源于韩顺平Java课程,讲的非常好,非常详细,感兴趣的同学可以去学习。
如有错误,请大家批评指正,共同进步。

原文链接:https://www.cnblogs.com/wmshun/p/18368279

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号