java5之后对原始数据类型如int、char、long等基本数据类型有自动打包成相应的复合类型Integer、Character、Long等的机制;也可以将复合类型自动转换为原始类型。

这取决于程序要进行怎样的处理。如:

int i = 0;

Integer obj = i;

-----

Integer obj = new Integer(0);

int i = obj;

但是并不是所有的地方都会进行自动的打包和解包。

有些地方存在“陷阱”,不注意的话,会产生问题。如:

java.util包中的List接口有两个remove方法,一个接收int参数,表示删除指定位置的元素;一个接收Object参数,表示删除指定的元素(内部使用equals进行元素相等的判断)。

如果有一个List<Integer> list = new ArrayList<Integer>();

list.add(1);

list.add(2);

list.add(3);

如果你调用list.remove(0);表示删除的是位置0上的元素即1。

如果你调用list.remove(new Integer(0));表示删除要0这个元素,但是list中没有这个元素,因此list元素不会发生变化。

另外valueOf方法使得-128~high之间的数字都指向同一个引用。

  1. public static Integer valueOf(inti) {
  2. if(i >= -128 &&i <=IntegerCache.high)
  3. //如果i在-128~high之间,就直接在缓存中取出i的Integer类型对象
  4. return IntegerCache.cache[i + 128];
  5. else
  6. return new Integer(i); //否则就在堆内存中创建
  7. }

Java的原始类型自动包装与解包机制的更多相关文章

  1. 205K+程序员关注过的问题:为什么不应该使用Java的原始类型?

    在逛 Stack Overflow 的时候,发现了一些访问量像熊耳山一样高的问题,比如说这个:为什么不应该使用Java的原始类型?访问量足足有 205K+,这不得了啊!说明有很多很多的程序员被这个问题 ...

  2. java自动包装与解包

    关于java的自动包装机制想必大家都用过吧,一般这些机制都用于在往容器中存储基本类型数据的时候,因为容器中不允许存在基本数据类型,所以就会调用自动包装机制,将基本数据类型转换为对象,将基本数据保存在对 ...

  3. Swift中的Optional类型 (可选类型)与强制解包 ? !

    我们在swift的开发中会经常遇见?和! ,理解这两个符号深层次的内容对我们的开发是相当有利的: 目前网上对swift3.0的教程还相当的少,如果去搜索会发现早期的说法,在定义变量的时候,swift是 ...

  4. Java基础以及变量和运算符、包机制、javadoc生成

    目录 注释.标识符.关键字 注释 标识符 关键字 标识符注意点 数据类型 强类型语言 弱类型语言 Java的数据类型 基本类型(primitive type) 数值类型 boolean类型 什么是字节 ...

  5. RPG Maker MV游戏解包

    该文章最新版本请前往:https://www.crowsong.xyz/127.html 前言 使用Petschko's RPG-Maker-MV File-Decrypter进行解包 使用Petsc ...

  6. java中符号类型和无符号类型的问题分析

    一 参考博文 java中无符号类型的解决方案 二 java中的无符号数和有符号数 在计算机中,可以区分正负的类型,称为有符号类型,无正负的类型,称为无符号类型. 使用二进制中的最高位表示正负 计算机中 ...

  7. Java之集合初探(二)Iterator(迭代器),collections,打包/解包(装箱拆箱),泛型(Generic),comparable接口

    Iterator(迭代器) 所有实现了Collection接口的容器都有一个iterator方法, 用来返回一个实现了Iterator接口的对象 Iterator对象称作迭代器, 用来方便的实现对容器 ...

  8. Java网络编程和NIO详解4:浅析NIO包中的Buffer、Channel 和 Selector

    Java网络编程与NIO详解4:浅析NIO包中的Buffer.Channel 和 Selector 转自https://www.javadoop.com/post/nio-and-aio 本系列文章首 ...

  9. Java中的原始类型(Primitive Types)与引用类型(Reference Values)

    Java虚拟机可以处理的类型有两种,一种是原始类型(Primitive Types),一种是引用类型(Reference Types). 与之对应,也存在有原始值(Primitive Values)和 ...

随机推荐

  1. USACO-palsquare 遇到的一个坑

    /** ID: njuwz151 TASK: palsquare LANG: C++ */ #include <iostream> #include <cstdio> #inc ...

  2. sizzle选择器的使用

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. Linux实战教学笔记13:定时任务补充

    第十三节 定时任务补充 标签(空格分隔): Linux实战教学笔记 ---[更多资料点我查看][1] 1,生产环境常用Crontab专业实例 1.1书写crontab定时任务多个基本要领 1.1.1 ...

  4. html的基本标记符号

    文本标记:<h1><h2><h3><h4><h5><h6>: 段落标记:<p>: 空格:&nbsp: 换行: ...

  5. 使用matplotlib快速绘图

    matplotlib的pyplot子库提供了和matlab类似的绘图API,方便用户快速绘制2D图表.让我们先来看一个简单的例子: # -*- coding: utf-8 -*- import num ...

  6. JAVAEE——SSH项目实战02:客户列表和BaseDao封装

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7129152.html 该项目在SSH三大框架整合基础上进行开发:http://www.c ...

  7. Day01_变量,数据类型_程序交互_流程控制

    python执行的两种方式: 1,交互的方式:  优点:可以及时调试程序,调试方法  缺点: 无法永久保存代码 2,保存在文件中执行  优点:可以永久保存代码,在执行的时候调用  缺点:不能即时调试代 ...

  8. JS将文件以form表单一样提交到后台

    这是很简单.. HTML <div> <input type="file" id="myfile"> <input type=&q ...

  9. DELPHI下的SOCK编程

     DELPHI下的SOCK编程(转自http://www.cnblogs.com/devcjq/articles/2325600.html) 本文是写给公司新来的程序员的,算是一点培训的教材.本文不会 ...

  10. js 设置下拉框的默认值

    设置下拉框的默认值,直接在option中增加selected就可以了.但是现在要使用JS来设置它的默认值,代码如下: <select name="aaa" id=" ...