疯狂Java讲义-包装类学习笔记
2016-01-14 11:28
274 查看
一、什么是包装类
Java中的8中基本类型并不支持面向对象机制,没有成员变量,方法可以调用。Java为了这一中类型引入了包装类,即把基本数据类型当成类来处理。
二、基本数据类型与包装类对应关系
三、自动装箱与自动拆箱
自动装箱就是可以直接把基本数据类型变量直接赋值给包装类变量。
自动拆箱就是可以直接把包装类变量直接赋值给基本数据类型变量。
例子:
使用自动拆箱装箱
Integer a = 1;//自动装箱
int b = a; //自动拆箱
没有使用自动拆箱装箱
Integer a = new Integer(1);
int b = a.intValue();
使用自动装箱拆箱可以很方便的对基本类型和包装类类型进行转换。
四、包装类常用的静态方法
(一)字符串转换成基本类型
Xxx.parseXxx(String s) 第一个Xxx代表包装类(Char 除外)
第二个Xxx代表基本类型
例子:
String intStr = "123";
int a = Integer.parseInt(intStr);//a = 123
String floatStr = "45.6f"//f代表float型
float b = Float.parseFloat(floatStr);//b = 45.6
(二)基本类型转换成字符串
String.valueOf(xxx); //xxx为数值
例子:
String intStr = String.valueOf(78);//inStr = "78";
String floatStr = String.valueOf(45.6f);//floatStr = "45.6" 没有f
五、包装类的比较
(一)包装类与基本数据类型的比较
包装类型可以与基本类型直接比较.
例子:
Integer a = 10;
System.out.println("a是否大于6:" + (a > 10));//输出 a是否大于6:true
(二)包装类与包装类的比较
因为包装类是引用类型,如果两个包装类变量直接比较,两个包装类变量所指向的位置相同,
结果才会true;
情况一、两个包装类变量不全使用自动装箱
例如:
Integer a = 10;
Integer b = new Integer(10);
System.out.println(""+(a == b));//结果为false,因为a和b指向对象的位置并不相同。
情况二、两个包装类变量全使用自动装箱
例如:
Integer a = 10;
Integer b = 10;
System.out.println(""+(a==b));//结果为true
Integer c = 128;
Integer d = 128;
System.out.println(""+(c == d));//结果为false
那么问题来了,为什么两个的值为10就相同,为什么值为128的时候就不相同呢?
系统会把-128~127之间的每一个数自动装箱成一个Integer实例,放进一个cache缓存当中,
每当我们创建-128~127之间的Integer实例的时候,系统就会直接把实例指向cache中对应的实例,
所以当我们创建的Integer实例的值在-128~127之间的时候,只要他们的值相同,都会指向同一个
位置,他们的指向相同,所以直接比较的结构就相同。
如果创建的Integer实例的数值不在这个范围里面,系统每次遇到要创建实例的时候,都会新创建一个
实例,所以就算实例的数值相同,他们的指向也不相同,所以直接比较的结果肯定不相同。
在比较包装类实例的时候,通常会使用以下方法:
1、实例.toCompare(另一个实例); 数值相同为0 大于为1 小于为-1
2、包装类.compare(包装类实例1,包装类实例2);数值相同为0 大于为1 小于为-1
Java中的8中基本类型并不支持面向对象机制,没有成员变量,方法可以调用。Java为了这一中类型引入了包装类,即把基本数据类型当成类来处理。
二、基本数据类型与包装类对应关系
byte | Byte |
short | short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
自动装箱就是可以直接把基本数据类型变量直接赋值给包装类变量。
自动拆箱就是可以直接把包装类变量直接赋值给基本数据类型变量。
例子:
使用自动拆箱装箱
Integer a = 1;//自动装箱
int b = a; //自动拆箱
没有使用自动拆箱装箱
Integer a = new Integer(1);
int b = a.intValue();
使用自动装箱拆箱可以很方便的对基本类型和包装类类型进行转换。
四、包装类常用的静态方法
(一)字符串转换成基本类型
Xxx.parseXxx(String s) 第一个Xxx代表包装类(Char 除外)
第二个Xxx代表基本类型
例子:
String intStr = "123";
int a = Integer.parseInt(intStr);//a = 123
String floatStr = "45.6f"//f代表float型
float b = Float.parseFloat(floatStr);//b = 45.6
(二)基本类型转换成字符串
String.valueOf(xxx); //xxx为数值
例子:
String intStr = String.valueOf(78);//inStr = "78";
String floatStr = String.valueOf(45.6f);//floatStr = "45.6" 没有f
五、包装类的比较
(一)包装类与基本数据类型的比较
包装类型可以与基本类型直接比较.
例子:
Integer a = 10;
System.out.println("a是否大于6:" + (a > 10));//输出 a是否大于6:true
(二)包装类与包装类的比较
因为包装类是引用类型,如果两个包装类变量直接比较,两个包装类变量所指向的位置相同,
结果才会true;
情况一、两个包装类变量不全使用自动装箱
例如:
Integer a = 10;
Integer b = new Integer(10);
System.out.println(""+(a == b));//结果为false,因为a和b指向对象的位置并不相同。
情况二、两个包装类变量全使用自动装箱
例如:
Integer a = 10;
Integer b = 10;
System.out.println(""+(a==b));//结果为true
Integer c = 128;
Integer d = 128;
System.out.println(""+(c == d));//结果为false
那么问题来了,为什么两个的值为10就相同,为什么值为128的时候就不相同呢?
系统会把-128~127之间的每一个数自动装箱成一个Integer实例,放进一个cache缓存当中,
每当我们创建-128~127之间的Integer实例的时候,系统就会直接把实例指向cache中对应的实例,
所以当我们创建的Integer实例的值在-128~127之间的时候,只要他们的值相同,都会指向同一个
位置,他们的指向相同,所以直接比较的结构就相同。
如果创建的Integer实例的数值不在这个范围里面,系统每次遇到要创建实例的时候,都会新创建一个
实例,所以就算实例的数值相同,他们的指向也不相同,所以直接比较的结果肯定不相同。
在比较包装类实例的时候,通常会使用以下方法:
1、实例.toCompare(另一个实例); 数值相同为0 大于为1 小于为-1
2、包装类.compare(包装类实例1,包装类实例2);数值相同为0 大于为1 小于为-1
相关文章推荐
- Spring容器的继承
- Java贪心算法 删数字问题
- 7 种将字符串反转的 Java 方法
- Eclipse中svn插件的安装
- 用java模拟dos树结构(tree命令)第二弹
- 使用spring cloud实现分布式配置管理
- 使用java命令执行class文件
- Note: An exception occurred while getting the Javadoc. (file not on classpath)
- ActiveMQ讯息传送机制以及ACK机制
- java MD5 密码加密
- java自带线程池和队列详细讲解
- Java MVC框架性能比较 jsp、struts1、struts2、springmvc3 (转帖) 3ff0
- 关于 Java 数组的 12 个最佳方法
- java.util.Properties类
- 关于java格式化数据,保留两位小数不精准的问题
- spring mvc 使用jackson暴露http+json服务时,如何设置jackson
- 第11章 为Spring添加REST功能
- Eclipse设置护眼背景色及字体
- java replaceall 使用正则表达式替换单等号,不替换其他相关的等号。
- Eclipse 使用 Link 方式进行插件的安装