Java程序设计—面向对象0124

Wesley13
• 阅读 442
  • 包装类的常规操作
  1. 包装类常量:MAX_VALUE, MIN_VALUE, SIZE(在内存中占多少)

  2. 包装类构造器:接受自己的类型或者String类型,但Character除外。Integer(int val){ }  Integer(String e){ } 。

  3. 装箱和拆箱,实现基本类型和包装类型的转换。

    1 //装箱 2 Integer num1=new Integer(1111); 3 Integer num2=Integer.valueOf(222);//recommended,带有缓存 4 //拆箱 5 int a=num1.intValue();//byteValue, shortValue, integerValue,floatValue,longValue,doubleValue

   4. Number()类具有byteValue, shortValue, integerValue,floatValue,longValue,doubleValue这六类方法,将当前对象转换成xxx类型,例如:

1         Long num=123L;
2         int b=num.intValue();
3         System.out.println(b);

   5. String 和包装

 1         //String 转成包装类对象
 2         Integer num3=new Integer("111");
 3         Integer num4=Integer.valueOf("222");
 4         System.out.println(num3+num4);//333
 5         //包装类转成String
 6         String str=num3.toString();
 7         System.out.println(str.getClass());//class java.lang.String
 8         String str2="2222";
 9         int c=Integer.parseInt(str2);
10         System.out.println(c);
11         
12         System.out.println(new Boolean("SB"));//除了true/TRUE字符串,其他都是false.
  •  包装类中的缓存设计(享元模式)
  1. IntegerCache是Integer中的内部类,其范围在-128-127之间。Integer.valueOf的大小判断,如果传入的数值在-127-127之间,则直接比较大小,如果超过这个范围,那么会新构建一个Integer。具体的比较可以参考这篇文章:https://www.jianshu.com/p/9cb9c61b0986

    个人测试一下,结果如下:

 1         Integer i1=new Integer(111);
 2         Integer i2=new Integer(111);
 3         System.out.println(i1==i2);//false
 4         Integer i3=Integer.valueOf(123);
 5         Integer i4=Integer.valueOf(123);
 6         System.out.println(i3==i4);//true
 7         Integer i5=123;
 8         Integer i6=123;
 9         System.out.println(i5==i6);//true
10         //-----------------------------------
11         Integer i_1=new Integer(222);
12         Integer i_2=new Integer(222);
13         System.out.println(i_1==i_2);//false
14         Integer i_3=Integer.valueOf(222);
15         Integer i_4=Integer.valueOf(222);
16         System.out.println(i_3==i_4);//false
17         Integer i_5=222;
18         Integer i_6=222;
19         System.out.println(i_5==i_6);//false

    2. 明确一点:Integer num=xxxx是语法糖,在底层实现还是用valueOf实现的。相当于:Integer num=Integer.valueOf()。那么既然通过valueOf实现,就要按照传入参数范围判断-128-127之间。

      如果不在这个范围,则新建一个Integer对象,那么通过==对比的则是对象的内存地址,所以必然每新建一个对象,这两个对象不相等。

    3. 用于节省空间,共享一个,缓存设计。

    4. equals也可以进行比较,但是在底层是拆箱之后比较的,所以是相等的。故,所有的包装类比较数值的时候,建议用equals。

1         System.out.println(i_5.equals(i_6));//true
  •  包装类型和基本数据类型的区别,以int和Integer为例:
  1. Integer和Int的默认值不同,Integer为null, int为0。所以,Integer既可以表示0,也可以表示Null
  2. 包装类中提供了很多类型相关的算法,例如二进制转换等。Integer.tobinaryString(int val)。
  3. 方法中的基本类型变量存在栈中,包装类型存在堆中。
  4. 集合框架中,只能存放存储对象类型,不能存放基本数据类型。
  • 抽象方法
  1. 使用abstract修饰符修饰父类(抽象类)的方法,且没有方法体
  2. 修饰符不能static(static 类级别的,不允许覆盖的), private(无法继承)和final(final 不允许覆盖)
  3. 不能创建实例,不能new一个新的对象
  4. 抽象类中可以不存在抽象方法,但是这样设计意义不大。
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
2年前
java8新特性
Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
2年前
Integer比较相等
Integertype1;??? 我们知道Integer是int的包装类,在jdk1.5以上,可以实现自动装箱拆箱,就是jdk里面会自动帮我们转换,不需要我们手动去强转,所以我们经常在这两种类型中随意写,平时也没什么注意但Integer他是对象,我们知道比较的是堆中的地址,但有个奇怪的事是,如果Integera123,
Wesley13 Wesley13
2年前
JAVA 面试相关
1\.int和Integer有什么区别?答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapperclass),int的包装类就是Integer,从Java5开始引入
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
Java int与Integer的区别
int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别:int是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象1.Java中的数据类型分为基本数据类型和复杂数据类型int是前者而integer是后者(也就是一个类);因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为n
Wesley13 Wesley13
2年前
Java的自动装箱与拆箱(Autoboxing and unboxing)
一、什么是自动装箱拆箱 很简单,下面两句代码就可以看到装箱和拆箱过程1//自动装箱2Integertotal99;34//自动拆箱5inttotalprimtotal;简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。