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发展的一大羁绊了
  
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Swift4学习笔记5——流程控制语句

if for while switch assert

Qt5学习笔记(4)——树形控件QtreeWidget(续)

QTreeWidget顾名思义,这是用来展示树型结构(也就是层次结构)的。Qt中实现树形结构可以使用QTreeWidget类,也可以使QTreeView类,QTreeWidget继承自QTreeVie...

STM32F4学习笔记5——SysTick定时器

SysTick 定时器被捆绑在 NVIC 中,用于产生 SYSTICK 异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许...

MSDN Kernel-Mode Driver Architecture学习笔记(4)——Kernel-Mode Driver Components (5)

9) DispatchDeviceControl和DispatchInternalDeviceControl例程 一个驱动程序的DispatchDeviceControl和Dispat...

MySql 基础学习笔记 1——概述与基本数据类型: 整型: 1)TINYINT 2)SMALLINT 3) MEDIUMINT 4)INT 5)BIGINT 主要是大小的区别 图 浮点型:命令

一、CMD中常用mysql相关命令 mysql -D, --database=name  //打开数据库 --delimiter=name  //指定分隔符 -h, --host=nam...

Java网络爬虫crawler4j学习笔记<5> TLDList类

源代码package edu.uci.ics.crawler4j.url;import org.slf4j.Logger; import org.slf4j.LoggerFactory;import ...

Java学习笔记--SSH框架整合(struts2、spring4、hibernate5)

一、SSH三大框架的概述   ssh为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。    集成SSH框架的系统从职责上分为四层:表...

学习笔记5—Java基础4_面向对象下a

类的继承:      通过继承可以简化类的定义 。      Java只支持单继承,不允许多重继承。 但可以有多层继承,即一个类可以继承某一个类的子类,如类B继承了类A,类C又可以继承类B,那么类C也...

学习笔记之JavaSE(5)--Java基础语法4

方法和方法重载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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