- 浏览: 57817 次
- 性别:
- 来自: 成都
文章分类
第五条 基本类型优先于装箱基本类型
java有一个类型系统由两部分组成,包含基本类型(如int,double,long,boolean)和引用类型(如String,List),每一个基本类型都有一个对应的引用类型,称作装箱基本类型。基本类型和装箱类型有3个区别:
1:基本类型只有值,而装箱基本类型则具有与它们的值不同的同一性。
2:基本类型只有功能完备的值,而每个装箱基本类型除了它对应基本类型的所有值功能之
外,还有个非功能值:null。
3:基本类型通常比装箱基本类型更节省时间和空间。
看下面实例
这个比较器看似不错。但是在输入order.Compare(new Integer(11),new Integer(11)),这
个比较下意识认为是0,然而输出结果是1,这表明一个大于第二个数。问题出在那了?
在对first<second执行计算会导致被first和second引用的Integer实例被自动拆箱,也就是说,它提取了它们的基本类型值,计算动作要检查产生的第一个int值是否小于第二个。但是假设答案是否定的。下一个测试就是执行计算表达式first==second,它在两个对象引用上执行同一比较。如果first 和second引用表示用一个int值的不同的Integer实例。这个比较操作就会返回false,比较器会错误的返回1.表示第一个Integer值大于第二个。对装箱基本类型运用==操作符几乎是错误的。
修正这个问题就是添加两个局部变量,来保存两个比较值。
接下来。在看个程序
在执行时(i==42)会抛出NullPointerException异常,问题在于,i是一个Integer,而不是int,就像所有对象的引用域一样,它的初始值null,在一项操作中混合使用基本类型和装箱类型时,装箱基本类型就会自动拆箱,此时Nul对象引用被自动拆箱,就会得到一个nullPointException异常。
在选择类型时应该是基本类型优先于装箱基本类型。当程序用==操作符比较两个装箱基本类型时,它做了个同一性比较,在程序进行涉及装箱和拆箱基本类型的混合类型计算时,它会进行拆箱,当程序进行拆箱时,会抛出NullPointerException。最后,当程序装箱了基本类型值时,会导致高开销和不必要的对象创建。
注:本文出自《effective java 中文版》
java有一个类型系统由两部分组成,包含基本类型(如int,double,long,boolean)和引用类型(如String,List),每一个基本类型都有一个对应的引用类型,称作装箱基本类型。基本类型和装箱类型有3个区别:
1:基本类型只有值,而装箱基本类型则具有与它们的值不同的同一性。
2:基本类型只有功能完备的值,而每个装箱基本类型除了它对应基本类型的所有值功能之
外,还有个非功能值:null。
3:基本类型通常比装箱基本类型更节省时间和空间。
看下面实例
Comparator<Integer> order=new Comparator<Integer>(){ public int comparator(Integer first,Integer second){ return first<second?-1:(first==second?0:1) } }
这个比较器看似不错。但是在输入order.Compare(new Integer(11),new Integer(11)),这
个比较下意识认为是0,然而输出结果是1,这表明一个大于第二个数。问题出在那了?
在对first<second执行计算会导致被first和second引用的Integer实例被自动拆箱,也就是说,它提取了它们的基本类型值,计算动作要检查产生的第一个int值是否小于第二个。但是假设答案是否定的。下一个测试就是执行计算表达式first==second,它在两个对象引用上执行同一比较。如果first 和second引用表示用一个int值的不同的Integer实例。这个比较操作就会返回false,比较器会错误的返回1.表示第一个Integer值大于第二个。对装箱基本类型运用==操作符几乎是错误的。
修正这个问题就是添加两个局部变量,来保存两个比较值。
Comparator<Integer> order=new Comparator<Integer>(){ public int comparator(Integer first,Integer second){ int i=first; int j=second; return i<j?-1:(i==j?0:1) } }
接下来。在看个程序
public class Unbelievable{ static Integer i; public static void main(String [] args){ if(i==42){ System.out.println("Unblievable"); } } }
在执行时(i==42)会抛出NullPointerException异常,问题在于,i是一个Integer,而不是int,就像所有对象的引用域一样,它的初始值null,在一项操作中混合使用基本类型和装箱类型时,装箱基本类型就会自动拆箱,此时Nul对象引用被自动拆箱,就会得到一个nullPointException异常。
在选择类型时应该是基本类型优先于装箱基本类型。当程序用==操作符比较两个装箱基本类型时,它做了个同一性比较,在程序进行涉及装箱和拆箱基本类型的混合类型计算时,它会进行拆箱,当程序进行拆箱时,会抛出NullPointerException。最后,当程序装箱了基本类型值时,会导致高开销和不必要的对象创建。
注:本文出自《effective java 中文版》
发表评论
-
Spring源码分析之IOC2
2013-03-16 23:25 778本篇将介绍下ApplicationCo ... -
Spring源码分析之IOC
2013-03-16 21:40 734先看两种方式在IOC容器取得bean 1 beanFactor ... -
一些在工作中遇到的问题汇总
2012-12-10 23:31 0保留一定的小数位数 1 DecimalFormat ... -
Set集合源码初探
2012-12-06 23:07 0[color=green][size=medium] ... -
一些常用的jar包
2012-12-04 22:44 0一些常用的jar 放在网上方便使用 Did your c ... -
java 获取请求ip
2012-11-20 23:11 3242public class IpUtil { publ ... -
mongodb
2012-11-20 22:09 688mongodb文档, -
padingtoolbar 的扩张
2012-10-31 22:01 0在Ext的原有分页控件中,服务器端方法是根据传入的起始数据记录 ... -
extjs的一些组件
2012-10-17 22:34 669<script type="text/java ... -
extjs
2012-10-14 23:09 611extjs的一些文档 -
jquery ui
2012-09-11 22:54 700一个jquery ui 后台 -
重拾java之线程1
2012-09-10 00:17 908[size=medium] 接触java也有一段时间了,以前选 ... -
dom4j 一些使用
2012-07-30 22:40 0dom4j使用 -
一个http请求
2012-07-18 00:04 0ackage com.sxit.phoenix.common; ... -
读书笔记effective之对所有对象通用的方法
2012-03-18 17:22 858读书笔记effective之对所有对象通用的方法 第一条 覆 ... -
读书笔记effective java 之条目
2012-03-18 15:05 819最近看了下effective java 有编程许多经验值得学 ... -
读书笔记effective java 之通用程序设计2
2012-03-15 20:59 892第三条 了解和使用类库 ... -
effective java 之通用程序设计
2012-03-15 16:15 741第一条 将局部变量的作用域最小化 将局部变量的作用域最小 ... -
http与socket连接区别
2011-11-08 01:11 446相信不少初学手机联网 ... -
HashMap 一般遍历
2011-11-04 16:28 759Map map=new HashMap() Iterator ...
相关推荐
effective java 读书笔记,第二版自己摘要并翻译,以备速查。
Effective Java读书笔记.pdf
实战Java高并发程序设计 葛一鸣 / 郭超 著 高清 带目录下载 内容简介: 在过去单核CPU时代,单任务在一个时间点...《实战Java高并发程序设计》内容丰富,实例典型,实用性强,适合有一定Java基础的技术开发人员阅读。
内容源自清华大学出版的《Java程序设计习题集》,小弟将自己做题的笔记整理了一部分,与各位分享,请勿用于商业目的!谢谢
Java程序设计个人所整理的一些笔记
Java语言程序设计-进阶篇(原书第10版) 学习笔记 Java语言程序设计-进阶篇(原书第10版) 学习笔记 Java语言程序设计-进阶篇(原书第10版) 学习笔记 Java语言程序设计-进阶篇(原书第10版) 学习笔记 Java语言程序...
Java语言程序设计学习笔记,配套的md文件,查找起来方便一些
【Effective Java】阅读笔记markdown 文件
Java面向对象程序设计笔记: 目录----非原创,上课的时候老师给的资料哦 第一章 Java 前凑 3 1. Java前凑 3 Java产生的目的 3 Java的诞生的历史 3 2.Java语言的特点 3 简单性 3 面向对象 3 网络技能 3 3....
这是试读版,只有前两章,不过是原版不是扫描版。我会在我的博客记录我的阅读笔记。
Effective Java读书笔记,记载了大部分我觉的有用的东西,前半部分有代码说明,但后半部分的代码,太过琐碎,就没有整理
JAVA程序设计学习笔记.pdf
effectiveJava的笔记
Effective-Java读书笔记,别人分享的
《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》...
Java程序设计笔记 对于初学者应该能有一些帮助 ,有问题请留言
2021年EFFECTIVEJAVA读书笔记.docx
Java语言程序设计(一)串讲笔记(最新版
自考Java语言程序设计(一)串讲笔记(珍藏版).pdf
Java面向对象思想与程序设计电子笔记(刘彦君版),帮助Java学习者从入门走向精通。这是个很高的目标,非常具有挑战性,本笔记就是融合初学者学习的困难,将抽象困难理解的Java入门变得简单易懂,方便初学者跨入Java...