第十五天:java包装类以及装箱拆箱操作(包含integer享元设计模式)

常用API
①包装类(将基本数据类型包装成引用类型)
8中基本数据类型的包装类中除了char和int的包装类是Character和Integer,其他包装类都是首字母大写即可,都提供了相应的带参的构造方法。
包装类的构造方法:包装类的构造方法一般都有重载(除了Character),一个构造方法的参数是对应的基本数据类型,另一个构造方法的参数是字符创类型。
注意:8中基本数据类型对应的包装类都重写了equals方法,并且都用final修饰,不能被继承。


②装箱拆箱
装箱:基本数据类型–>引用数据类型
拆箱:引用数据类型–>基本数据类型
手动装箱:通过调用构造方法把对象创建出来(Integer i = new Integer(12)或者Integer i =Ingeger.valueOf(12))//通过构造方法来实现装箱
语法:包装类 对象名 = 包装类名.valueOf(基本类型值);//通过valueOf实现装箱
手动拆箱:通过 对象名.xxxValue();(int i = new Integer(12).IntValue())
语法:基本类型 变量名=包装类对象.XXXValue();(XXX为对应的基本数据类型)
自动装箱:直接将基本数据类型的变量赋值给相应的对象引用(int i=1;Integer num =i;)
自动拆箱:直接将引用类型的的对象赋值给基本数据类型的变量(int i=1;Integer num=i;int num1=num;)
注意:1.在jdk1.5以前从代码上看是自动装箱和自动拆箱,但是在jvm虚拟机代码的内部采取的还是手动装箱和手动拆箱。
2.jdk1.5以前,java只支持手动装箱和手动拆箱,jdk1.5及以后就支持自动装箱和自动拆箱。
基本类型和String类型之间的相互转换
基本类型–>String:①包装类的构造方法
String–>基本类型(char除外):①包装类的构造方法 int i = new Integer(“12”).intValue();
②parse基本类型(String类型值)例如String str =“15”;int i =Integer.parseInt(str)(一般推荐用这种方法,因为第一种方法需要创建对象,
会占用较多内存资源)
基本类型–>String:①基本类型+""(基本类型+空字符串,推荐使用)
②包装类.toString(基本类型)
总结:手动装箱方式有两种:①通过构造方法传参进行装箱 ②通过包装类类型.valueOf(基本数据类型)
手动拆箱方式:对象.XXXValue()//XXX表示相应的基本数据类型(其中对象表示基本数据类型包装类的对象)
String–>基本数据类型有两种:①包装类型.parseXXX(字符串)②通过 对象.intValue()方法得到字符串(先进行装箱,再拆箱)
基本数据类型–>String由两种:①基本数据类型+"" ②包装类.toString(基本类型数值)//等价于对象.toString()(将该对象转换成字符串类型);

③Math类(类里面全部都是静态方法)
Math类中常用的一些方法:Math.max(a,b)返回较大的一个;Math.min(a,b)返回较小的一个;Math.pow(a,b)a的b次方;Math.round(a)四舍五入;random获取随机数(0~1)
Math.ceil(a)向上取整,Math.floor(a)向下取整。(jdk1.8+支持静态导入,导入包后不用通过类名进行调用,直接通过方法名调用即可)

④Random类(生成随机数专用,所有的方法都是非静态方法;java.util.Random)
Random random = new Random();
r.nextXXX(10);//XXX意思是基本数据类型,如果为double,则生成0~10之间的浮点数(包含0不包含10)


⑤Date和SimpleDateFormate
Date获取当前时间:Date date = new Date()
sout(date);
SimpleDateFormate:用于将Date时间格式进行格式化
Date date = new Date();
SimpleDateFormat adf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);
String result = adf.format(date);
System.out.println(result);
输出结果:2019年07月13日 16:19:52
将String类型转换为Date类型
String str=“2017-09-05”;
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
Date date = sdf.parse(str);//此处有异常
System.out.println(date);
将Date类型转换为String类型
Date date1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
String str2 =simpleDateFormat.format(date1);
System.out.println(str2);


⑥Calendar类(更容易国际化,操作比Date更简单)
获取Calendar对象:Calendar rightnow = Calendar.getInstance();//国际化代码
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH)+1;//国际化月份从0开始到11月结束,如果月份为12,则会在year上+1
int week = now.get(Calendar.WEEK_OF_MONTH);
int day = now.get(Calendar.DAY_OF_MONTH);
int hour = now.get(Calendar.HOUR);
int minute = now.get(Calendar.MINUTE);
int millscond = now.get(Calendar.MILLISECOND);
System.out.println(year+“年”+month+“月”+day+“日”+" “+hour+”:"+minute+":"+millscond);


Integer的享元设计模式(只有Integer才有,其他包装类没有享元模式):所有valueOf的参数值在-128-127范围内,始终使用的共享的元素,地址都是一样的
范围以外都是构造方法创建,new一次就是一个新地址,结果始终false)
Integer num1=288;//自动装箱
Integer num2 = new Integer(288);//手动装箱
System.out.println(num1
num2);//false
System.out.println(num1.equals(num2));//true,Integer内部重写了equals方法比较的是内容

    Integer num1=200;(底层实现:Integer num1 = new Integer(200))//创建了对象
    Integer num2 =200;(底层实现:Integer num2 = new Integer(200))
    System.out.println(num1==num2);//false(num1和num2是不同对象,在内存中地址不同)
    System.out.println(num1.equals(num2));//true


int num1 =12;
    Integer num2=num1;//(底层实现:Integer num2 = Integer.valueOf(12))//没有创建对象
    Integer num3=num1;//(底层实现:Integer num3 = Integer.valueOf(12))
    System.out.println(num2==num3);//true
    System.out.println(num2.equals(num3));//true

    double num1 =12;
    Double num2=num1;//(底层实现:Double num2 = new Double(12))
    Double num3=num1;//(底层实现:Double num3 = new Double(12))
    System.out.println(num2==num3);//false
    System.out.println(num2.equals(num3));//true

需要免费的java基础视频和java企业级开发视频以及项目实战(包含SSM框架详细讲解、activiti流程引擎、springboot、springcloud视频讲解和项目实战课程)可以添加qq:1743337375

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值