java5 学习笔记4——Autoboxing

原创 2007年09月20日 21:22:00
java5 学习笔记4——Autoboxing
 Java号称一切都是对象,除了primitive,也就是基本类型,这点估计让人很不爽,一开始你还没觉得有什么不妥,反正骨子里就认为基本类型就是int、float这些,在内存中就是占那么几个字节,别无他意。但是当你用collection时,比如要将一个整数放入ArrayList,你就会对“一切都是对象”抓狂了:一个int首先要包装成Integer,放入ArrayList<Integer>,取出时,再用intValue得到原来的整数值,够麻烦的,而Autoboxing就是用来为你做这个事情的。
 编译器在后台帮你把基本类型和他们相应的“包装类”之间的转换工作都做好了,所以现在基本上不用太多考虑int和Integer之间的转换了,两者在大部分情况下都可以互相赋值,除了一些特例,比如:
  Integer i = null;
  int j = i;
 这样会出现NullPointerException,所以要稍微留心。
 还有一个很搞笑的地方,就是==运算符。这是用来比较数值的,我们都知道。此外还能用来比较两个引用,看看是否指向同一个对象。那么下面的代码:
  Integer i =1000;
  Integer j = 1000;
  System.out.println(i==j);
 那么输出是什么?答案是false,可见AutoUnboxing没有处理==,也很好解释,因为在以前的Java中,这段代码就是比较两个引用,如果对它Unboxing,那么过去的代码放到tiger中编译就乱套了。
 仅此而已?当然不是,如果把上面的1000换成100,输出居然就变成true了,原因是tiger会把Boolean和-128~128的Integer以及short缓存,这时候两个Integer都是指向同一个对象(在内存中缓存的,值为100的Integer),奇怪吧,感觉Java越做越复杂,越做越古怪。
 总结:
 Autoboxing好吗?比起以前的Java,是一种进步,不过Java的primitive本来就很丑陋,虽然看起来符合C++人群的胃口。实际上,Java当初设计目的之一也是尽量吸引C++社群,所以才会出现这种“非完全面向对象”的尴尬,在当时是必要的,但现在已经成为Java发展的一大羁绊了
  

java5 自动装箱(AutoBoxing)引来了意想不到的空指针异常

Java 5 引进了自动装箱(Autoboxing),它一直是一个非常便利的特性。有了它以后,基本类型与其包装类基本上没有多大的区别了。但是,这样的一个机制在我们的程序非常复杂的时候可能会出现一个意想...
  • xlinsist
  • xlinsist
  • 2014年11月12日 13:34
  • 535

NLTK 学习笔记(4)

文本分类 1. 有监督分类 先来个经典的图 (1) 性别判定 我们使用特征提取器处理名称数据,并划分特征集的结果链表为一个训练集和一个测试集。训练集用于训练一个新的“朴素贝叶斯”分类器。之...
  • liuha511
  • liuha511
  • 2014年11月30日 23:08
  • 516

Spring4学习笔记-SpringJDBC基本操作(补充)

湘潭项目使用Spring+CXF编写服务器端,JDBC操作全部由Spring完成,下面记录其中一个典型的实例。public class Userinfo_lvDaoImpl implements Us...
  • umgsai
  • umgsai
  • 2016年02月04日 11:05
  • 98

haskell学习笔记(4)-函数入门

模式匹配 (Pattern matching)haskell可以定义同名函数,然后会根据声明顺序搜索与传入参数最接近的函数签名,然后调用那个函数,可以看成是强化版的函数重载。模式匹配的参数可以是字面量...
  • o83290102o5
  • o83290102o5
  • 2017年12月19日 09:56
  • 55

[Java5新特性]Annotation注解

Annotation概述、基本Annotation、自定义Annotation、@Target注解、@Retention注解、反射读取Annotation和注解配置JDBC案例...
  • u013575441
  • u013575441
  • 2015年06月01日 21:27
  • 848

Java 5 新特性——增强for循环

J2SE 1.5提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类...
  • okjohn
  • okjohn
  • 2011年02月11日 16:07
  • 1811

live555学习4(转)

十一  h264 RTP传输详解(3) 书接上回:H264FUAFragmenter又对数据做了什么呢? [cpp] view plaincopyprint? v...
  • cffishappy
  • cffishappy
  • 2012年12月28日 17:40
  • 1933

ASP.Net MVC开发基础学习笔记(4):校验、AJAX与过滤器

原文出处: Edison Chou的博客(@周旭龙EdisonChou)    一、校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System...
  • mss359681091
  • mss359681091
  • 2016年04月11日 16:34
  • 635

java5 学习笔记3——Enum

 我觉得Enum的基本功能,就是作为final static字段的替代品吧,的确让代码抽象程度提高了,也方便维护了,不过Enum的功能绝不限于此,既然是在新时期下出现的枚举,自然要比起C++前辈有突破...
  • wangchengsi
  • wangchengsi
  • 2007年09月19日 00:01
  • 866

java5 学习笔记2

 今天粗略的看了generic,泛型的基本功能,在C++中早就有了,不过Java中的generic的确多了很多东西,但是也正如许多人批判的,一大堆尖括号让代码变丑了,呵呵,不过我才刚开始学,没有体会 ...
  • wangchengsi
  • wangchengsi
  • 2007年09月17日 23:21
  • 589
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java5 学习笔记4——Autoboxing
举报原因:
原因补充:

(最多只允许输入30个字)