我们提出一个需求,将520的二进制、八进制、十六进制算出来,对于这种基本类型的一些操作,包装类就可以很好地解决这些问题。
public class IntegerDemo { public static void main(String[] args) { int love = 520; //转换为二进制 System.out.println(Integer.toBinaryString(love)); //转换为八进制 System.out.println(Integer.toOctalString(love)); //转换为十六进制 System.out.println(Integer.toHexString(love)); } } //运行结果 1000001000 1010 208
将基本数据类型封装成对象的的好处在于可以在对象中定义更多的功能方法操作该数据
常用的操作之一:用于基本数据类型与字符串之间的转换
例如:常见进制的转换
Public Static String toBinaryString(int i)
为了对基本数据类型进行更多的操作,更方便的操作,Java针对每一种数据类型都提供了对应的类类型,包装类类型。
· byte Byte · short Short · int Integer · long Long · float Float · double Double · char Character · boolean Boolean
下面的内容我们使用常见的Integer类型来讲解
public class IntegerDemo2 { public static void main(String[] args) { int love = 520; Integer love2 = new Integer(love); System.out.println(love2); //由数字组成的字符串也可以被转换为Integer String love3 = "520"; Integer love4 = new Integer(love3); System.out.println(love4); } }
通过包装类的一些方法可以很便捷的解决很多实际问题,比如String和int类型的相互转换
package cn.bwh_02_IntString; public class IntStringDemo { public static void main(String[] args) { int number = 520; //方式一:拼接字符串 String s1 = "" + number; System.out.println(s1); //方式二(推荐方法)任何类型的数据转换成字符串 String s2 = String.valueOf(number); System.out.println(s2); //方式三(最麻烦) Integer i = new Integer(number); String s3 = i.toString(number); System.out.println(s3); //方式四 String s4 = Integer.toString(number); System.out.println(s4); } }
package cn.bwh_02_IntString; public class StringIntDemo { public static void main(String[] args) throws Exception{ String s = "520"; //方式一 Integer i = new Integer(s); int x = i.intValue(); System.out.println(x); //方式二(推荐方法) int y = Integer.parseInt(s); System.out.println(y); } }
在我想要使用包装类的一些方法的时候,我可以通过基本类型包装类的构造方法将值传入,JDK5后的新特性就为我们大大的简化了一些麻烦的步骤
Integer a = 1; //这就是一个自动装箱,如果没有自动装箱的话,需要这样 Integer a = new Integer(1) int b = a; //这就是一个自动拆箱,如果没有自动拆箱的话,需要这样: int b = a.intValue() 这样就能看出自动装箱和自动拆箱是简化了基本数据类型和相对应对象的转化步骤
谈到数值顺便提一提缓存池问题
在于在Java 5以后,整型对象在内部实现中通过使用相同的对象引用实 现了缓存和重用。Integer类型对于-128-127之间的数字是在缓冲区取的,所以对于在这个范围内的数值用双等号比较是一致的,因为对应的内存地址是相同的。但对于不在这区间的数字是在堆中new出来的,所以地址空间不一样,也就不相等。
Character类对象中包装一个基本类别char的值
此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然。
//判断给定的字符是否是大写字符 public static boolean isUpperCase(char ch) //判断给定的字符是否是小写字符 public static boolean isLowerCase(char ch) //判断给定的字符是否是数字字符 public static boolean isDigit(char ch) //把给定的字符串转换为大写字符 public static boolean toUpperCase(char ch) //把给定的字符串转换为小写字符 public static boolean toLowerCase(char ch)
如果内容中有什么不足,或者错误的地方,欢迎大家给我留言提出意见, 蟹蟹大家 !^_^
如果能帮到你的话,那就来关注我吧!(系列文章均会在公众号第一时间更新)
一个坚持推送原创Java技术的公众号:理想二旬不止