位置:首页 » 技术 » java:无意识自动装箱的可怕之处

java:无意识自动装箱的可怕之处

日期:2015-07-01 阅读:0num
Advertisement

前言:《effective Java》一书确实经典,真是为没有早一点买到这本书而感到遗憾。再来学习一个小知识,在之前,我只是知道integer是int的装箱类,而int是基本类型而已,从来没有意识到自动装箱有这么大的区别,“要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。

根据书中所写,我测试了以下的简单例子。

package com.mwq.number;

public class Test {

    public static void main(String[] args) {
        long time1 = System.currentTimeMillis();

        long sum = 0L;
        for (int i = 0; i < Integer.MAX_VALUE / 2; i++) {
            sum += i;
        }

        System.out.println(sum);

        long time2 = System.currentTimeMillis();

        System.out.println(time2 - time1);

        Long sum1 = 0L;
        for (int i = 0; i < Integer.MAX_VALUE / 2; i++) {
            sum1 += i;
        }

        System.out.println(sum);

        long time3 = System.currentTimeMillis();

        System.out.println(time3 - time2);
    }

}

例子很简单,看看Long和long在+i的时候到底有多大的区别,花费的时间是如何的。

看结果,由于我电脑计算0到Integer.MAX_VALUE 的运算速度太慢,所以就只取了一半的量。

576460750692810753
1903
576460750692810753
10939

差了一个数量级!!!!!!!!!

sum在被声明为Long而不是long的时候,就会创造N(具体多少个N,我还真不知道,书中说的是2的31次方,显然我的不是)多个Long实例!

总结:项目中有大量的装箱和基本类型,看来是要好好的优化一下了。

相关文章
  • java:无意识自动装箱的可怕之处

    前言:<effective Java>一书确实经典,真是为没有早一点买到这本书而感到遗憾.再来学习一个小知识,在之前,我只是知道integer是int的装箱类,而int是基本类型而已,从来没有意识到自动装箱有这么大的区别,"要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱." 根据书中所写,我测试了以下的简单例子. package com.mwq.number; public class Test { public static void main(String

  • 《深入了解java虚拟机》自动装箱拆箱实例

    <深入理解java虚拟机>自动装箱拆箱实例 详细链接 http://blog.csdn.net/woshiwu/article/details/6637310

  • Java中的自动装箱跟自动拆箱功能JDK1.5

    Java中的自动装箱和自动拆箱功能JDK1.5 public class AutoBoxingUnboxing { public static void main(String[] args) { Integer inObj=5; Object boolObj=true; int it =7; if(boolObj instanceof Boolean){ boolean b=(Boolean)boolObj; System.out.println(b); String a="232223&qu

  • Java中的自动装箱与拆箱

    自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象.自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接. 如果你在Java1.5下进行过编程的话,你一定不会陌生这一点,你不能直接地向集合(Collections)中放入原始类型值,因为集合只接收对象.通常这种情况下你的做法是,将这些原始类型的值转换成对象,然后将这些转换的对象放入集合中.使用Integer,Double,Boolean等这些类我们可以将原始

  • Java 根本数据封装类自动装箱与拆箱

    Java 基本数据封装类自动装箱与拆箱 public class test { /** * @param args */ public static void main(string[] args) throws exception { (1) long t = new long(1); (2) system.out.println(t+1); (3) long t2 = t + 1; (4) system.out.println(t2); }} (2)t+1过程:t.longvalue + 1

  • Java菜鸟 自动装箱和拆箱有关问题

    Java初学者求助 自动装箱和拆箱问题 定义了一个Studnt 类 代码如下: public class Student { private Object javase; private Object oracle; public Student(Object javase,Object oracle) { super(); this.javase=javase; this.oracle=oracle; } } 调用时 public class App { public static void

  • java 自动装箱拆箱实现方法

    java 自动装箱拆箱实现方法 什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自j2se 5.0开始提供的功能. 一般我们要创建一个类的对象的时候,我们会这样: class a = new class(parameter); 当我们创建一个integer对象时,却可以这样: integer i = 100; (注意:不是 int i = 100; ) 实际上,上面那句代码相当于:integer i = new integer(100); 此即基本数

  • java中自动封装 解包机制(又称自动装箱,拆箱)Auto-Boxing,UnBoxing

    java中自动打包 解包机制(又称自动装箱,拆箱)Auto-Boxing,UnBoxing JDK 1.5以后引入了不少概念 Boxing Unboxing(装箱 拆箱 有人译作打包解包)还有Generic(泛型) 这些概念和 C# 有着惊人的相似. 这里的装箱应该理解为 封装对象 ,即把基础数据类型(如 int)转换成基础类型封装类的对象(如 new Integer()) 拆箱就是装箱的反过程,即把基础类型封装类的对象(如 new Integer())转换为基础数据类型(如 int). 装箱:

  • java之自动装箱跟拆箱(二)

    java之自动装箱和拆箱(二) 代码如下: public class EqualsDemo { public static void main(String[] args) { int i1=1,i2=1; Integer iv1=1,iv2=1; Integer in1=new Integer(1),in2= new Integer(1); Integer it1=Integer.valueof(1),it2=Integer.valueof(1); print("(1) " + (i

  • java 自动装箱与拆箱 中的圈套

    java 自动装箱与拆箱 中的陷阱 4.2 自动装箱和拆箱 基本数据(Primitive)类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能.虽然为您打包基本数据类型提供了方便,但提供方便的同时表示隐藏了细节,建议在能够区分基本数据类型与对象的差别时再使用. 4.2.1 autoboxing和unboxing 在Java中,所有要处理的东西几乎都是对象(Object),例如之前所使用的Scanner是对象,字符串(String)也是对象,之后还会看

  • java之自动装箱跟拆箱(一)

    java之自动装箱和拆箱(一) 先上机实验一次,例子在<深入理解java虚拟机>P274面 代码为 public class Test { public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e = 321; Integer f = 321; Long g = 3l; System.out.println(c==d); //tru

  • 自动装箱拆箱在Java集合类框架引起的性能有关问题 自动装箱拆箱在Java集合类框架引起的性能有关问题

    自动装箱拆箱在Java集合类框架引起的性能问题 面试时被问到这个问题,毫无疑问,这个问题,如果没有研究过的话,对于一个应届生来说,是答不上来的.最后面试官给出的答案是自动装箱/拆箱,但是,这个答案感觉不像是缺陷,更像是我们在程序开发过程当中应当注意的一些细节问题.并且这个"缺陷"的源头不在集合框架,而在于自动装箱拆箱其本身. JDK1.5引入了一些新的特性,这些特性如下: • 泛型编程 – 提供集合对象的编译时安全类型检查. • 增强 for 循环 - 编程更容易,去掉了修正了导致迭代

  • Java 自动装箱的困惑

    Java 自动装箱的疑惑 <深入理解Java虚拟机>中的阐述Java语法糖的有关自动装箱的例子如下: public class AutoPack { public static void main(String[] args) { // TODO Auto-generated method stub Integer a=1; Integer b=2; Integer c=3; Integer d=3; Integer e=321; Integer f=321; Long g=3L; Syste

  • 说说java的自动装箱(autoboxing)跟拆箱(unboxing) 说说java的自动装箱(autoboxing)跟拆箱(unboxing)

    说说java的自动装箱(autoboxing)和拆箱(unboxing) Adversity makes a man wise, not rich. 逆境出人才 java作为面向对象语言,有人认为所看到的都是对象,事实上,在javase5之前,基本类型默认并不是采用对象存在的如果您想要把基本类型作为对象来处理,就必须自行转换,不过,在javase5之后,为基本数据类型提供了自动装箱和拆箱功能,使得将基本类型转换为对象变得极其便捷. 在这里来捋一捋java的基本数据类型,不理不要紧,一理才发现俺也

  • java自动装箱与拆箱 java自动装箱与拆箱

    基本数据(Primitive)类型的自动装箱(autoboxing).拆箱(unboxing)是J2SE 5.0提供的新功能,跟泛型.变长参数等一样,这也是一颗"语法糖",之前介绍jvm早期优化的时候说过,语法糖对运行期的代码没有任何影响,其目的仅仅是方便程序员使用,所有语法糖编译后都将会还原成基础语法.这次介绍的自动装箱和拆箱也不例外.看下头的例子: public class Demo { public static void main(String[] args) { Intege

  • java自动装箱拆箱总结

    对于java1.5引入的自动装箱拆箱,之前只是知道一点点,最近在看一篇博客时发现自己对自动装箱拆箱这个特性了解的太少了,所以今天研究了下这个特性.以下是结合测试代码进行的总结. 测试代码: int a = 1; Integer b = 1; Integer c = 1; Integer d = 2; Integer e = 3; Integer f = 128; Integer g = 128; Long h = 3L; Double m = 4.0; Double n = 4.0; Float

  • Java自动装箱与拆箱的分析

    ??自动装箱与拆箱机制在实际使用中非常常见,不过也特别容易出错,博主在面对下面一道题的时候自信满满,可还是没有能够全对,所以写下这篇博文,给自己对自动装箱与拆箱机制做一下知识巩固,也给各位朋友做一下参考. ??首先有这样一道题,给出下面代码的输出结果: public class AutoBoxing { public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d =

  • Java基础之包装类的自动装箱跟拆箱详解 Java基础之包装类的自动装箱跟拆箱详解

    Java基础之包装类的自动装箱和拆箱详解 定义 在java中,数据类型可以分为两大类,即基本数据类型和引用数据类型,基本数据类型的数据不是对象,所以对于要将数据类型作为对象来使用的情况,java提供了相对应的包装类.(关于包装类的详细介绍请参看博客Java基础之常用类详解) 本篇博客主要讲述包装类的自动装箱和拆行机制. 所谓装箱,就是把基本数据类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int类型包装成Integer类型的对象,或者把double包装秤Double,等

  • 9_(JAVA基础300集最全课程 学习)自动装箱和拆箱

    9_(JAVA基础300集最全教程 学习)自动装箱和拆箱 在JDK5.0中新增了自动装箱和拆箱,为开发人员解决了很多开发中的效率问题,下面看看是怎么个流程: 1. Integer c=1; int d=c; System.out.println(d); 结果为: 引用 1 2. Integer a=null; int b=a; System.out.println(b); 结果为: 引用 Exception in thread "main" java.lang.NullPointerE

  • java 自动装箱与拆箱及引伸出的有关问题

    java 自动装箱与拆箱及引伸出的问题 java 中自动装箱与拆箱的问题 Integer i1 = 100; Integer i2 = 100; Integer i3 = 128; Integer i4 = 128; System.out.println(i1 == i2); System.out.println(i3 == i4); result: true false 为什么会出现这样的结果呢? jdk1.6源码分析: public static Integer valueOf(int i)

最新文章
  • 求助,西门子六类面板安装问题 求助,西门子六类面板安装问题

    求助大家,安装面板时遇到了点问题 : D 面板是这个: 后面这个盖子我怎么拔不开,是不是我方式不对? 还有怎么也分离不了模块,我把这个扣弄掉后,还是拔不掉模块 --cut-- wuxiao2522在2016-05-09 05:00:29回答到: 这个真是大力出奇迹,不过还是要稍微慢慢的操作,注意卡扣,然后就没别的机关了. vmebeh在2016-05-09 05:00:29回答到: 把第二张图的后盖拿开,按颜色放进卡子,再按上后盖 momou在2016-05-09 05:00:29回答到: 目测

  • 老爸手机下午被偷,万能的 V 友啊!求一个红米 note3 或者一个红米 3 的 F 码

    昨天刚刚回到学校,今天晚上老爸就给我打电话说他的红米 note1 被偷了,求万能的 V 友增个红米 note3 或者红米 3 的 v 码吧 在此谢过.或者买也行.谢谢谢谢 --cut-- 402645707在2016-05-10 07:20:07回答到: 昨天红米 3 开放购买 axzy在2016-05-10 07:20:07回答到: @402645707 然后你并抢不到,昨天亲测,米 5 和米 4S 首发,红米 3 没有卖, note3 全网几秒就售罄了 ihades在2016-05-10 0

  • 出MBA-mid2011 11-inch,低配询报价

    11年MBA 11-inch,Mid2011低配,购买与11年11月份,购买了apple care,保修失效在14年11月.机器在上海,最好上海同城交易,询报价. 有意加马化腾:六五0七9三3 --cut-- lingeomor在2013-01-15 18:14:0回答到: 目测5K5左右

  • 高科技LED面膜问世 或可令女人容颜永驻 高科技LED面膜问世 或可令女人容颜永驻

    据媒体报道,人们都想要长生不老,女人更加想要的是青春永驻,容颜不老.近期,依据中医理论和人体科学理论,研发出一款美容工具LED面膜,引起了时尚界和科技界的巨大关注. 据报道,LED面膜不像普通化妆品直接涂抹到肌肤上,它是通过一个面罩来完成.这个面罩从外观看起来很怪异,极像击剑运动面具.这款LED面膜可使肌肤产生具有美容功效的胶原蛋白,祛除雀斑,红血丝,修复改善问题肌肤以及皮肤晒伤.它能够促进面部血液循环,锁住肌肤水分.在美容的过程中,LED面膜还可以促进人体产生维生素D,刺激大脑中血清素的形成,

  • 将PPT文档转换为Word文档

    问:我是一名学生,现在老师上课一般都用PPT课件上课,我打算把老师课件打印出来复习.但是PPT直接打印效果不好,而且包含一些不需要的图片等等.我想把PPT幻灯片转化为Word文档打印出来.不过幻灯片一张一张复制太慢了,想寻找一款软件,把PPT幻灯片转化为Word文档,包括文本框里的内容.图表.照片. 答:有这种转换工具,但使用效果并不令人满意.其实,仅靠PowerPoint本身是可以将文档内容转换到Word的,这里介绍三种方法. 方法一.利用大纲视图 打开PPT演示文稿,单击"大纲",

  • 全球首家O2O移动商城全面升级,星润悦生活上线7大支付系统 全球首家O2O移动商城全面升级,星润悦生活上线7大支付系统

    2014年的新年被微信红包抢走了风头,这场席卷了几千万移动互联网用户的红包风暴,让微信支付绑定了众多用户的信用卡,所带来的微营销的发展,也让全球首家O2O移动商城--星润悦生活商城有了更多发展可能:2月26日,首款O2O悦生活商城移动电商全球启动发布会在广州天河希尔顿酒店隆重举行,电商专家.业界精英.投资机构.证券机构及媒体记者们共同出席,见证悦生活商城6.0版正式上线公测,共襄移动电商的盛举. 悦生活商城,是星润国际集团巨资打造的移动电商平台.商城定位于实体门店与移动手机用户的互动.交流.购买

  • ubuntu安装MySQL-Python提示mysql_config not found错误

    有些朋友在ubuntu安装MySQL-Python安装过程中出现错误提示 mysql_config not found 然后直接显示安装失败了,那么灰到这类问题我们要怎么解决呢,下面一聚教程注mysql_config not found错误问题给大家分析解决技巧吧. 配置MySQL-Python的时候系统报错,提示: EnvironmentError: mysql_config not found Google后得知mysql_config是属于MySQL开发用的文件,而使用apt-get安装的

  • 网站目录文件权限的安全设置

    网站安全是一个网站有好排名的一个重要因素了,下面我来给大家介绍在centos中简单的网站目录权限与安全设置方法,有需要了解的朋友可参考. linux中网站安全配置 1.我们首先设定网站目录和文件的所有者和所有组为centos,www,如下命令: chown -R centos:www /home/centos/web 2.设置网站目录权限为750,750是centos用户对目录拥有读写执行的权限,这样centos用户可以在任何目录下创建文件,用户组有有读执行权限,这样才能进入目录,其它用户没有任

  • U盘启动菜单的编辑方法

    一般U盘启动的根目录下都有一个menu.lst文件,这个就是添加或删减启动选项的配置文件,下面举一实例,让大家具体了解一下: title 启动第一硬盘第一主分区(hd0,0)上的操作系统 rootnoverify (hd0,0) makeactive chainloader +1 title 启动第一硬盘第二主分区(hd0,1)上的操作系统 rootnoverify (hd0,1) makeactive chainloader +1 title 启动Windows NT/2000/XP/2003

  • Android实现推送模式解决方案 Android实现推送模式解决方案

    Android实现推送方式解决方案 1.推送方式基础知识: 在移动互联网时代以前的手机,如果有事情发生需要通知用户,则会有一个窗口弹出,将告诉用户正在发生什么事情.可能是未接电话的提示,日历的提醒,或是一封新的彩信.推送功能最早是被用于Email中,用来提示我们新的信息.由于时代的发展和移动互联网的热潮,推送功能更加地普及,已经不再仅仅用在推送邮件了,更多地用在我们的APP中了. 当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如<地震应急通>就需要及时获取服务器上最

热门推荐
  • mac sniffer 能检测到只是打开了 wifi 但是没有连接任何热点的手机 mac 地址吗? mac sniffer 能检测到只是打开了 wifi 但是没有连接任何热点的手机 mac 地址吗? 比如像这个里面说的那样 在连接Wi-Fi的垃圾桶的帮助下,英国初创公司Renew将智能手机追踪带到伦敦的街头巷尾.在该城市本已配备广告屏幕的100个Renew Pod垃圾桶中,有一部分配上了全新的Renew Orb装置,可利用Wi-Fi网络可以追踪路过的人的距离和走路速度,甚至识别出他们的智能手机厂商. --cut-- Akagi201在2015-03-24 10:50:3回答到: linux可以, mac上不行, 网卡驱动不支持. lz可以装个KisMAC玩玩. nsxuan在2015-03-
  • 小米手机MIUI V5刷机教程 小米手机MIUI V5刷机教程 在MWC2013落幕之际,三星GALAXY S4发布之前,小米手机抢了风头,正式发布了最新的MIUI V5系统.下面小编就教你如何升级MIUI V5. 其实刷MIUI V5并不难,对于经常升级的小米发烧友来说更是不在话下,所以主要分享给小白用户.目前发布的MIUI V5仅支持小米手机2,如果你是小米1/1S或者青春版用户,就只能再等等了. 刷机方式一:连接电脑,通过刷机工具升级 刷机之前,需要下载两个文件:刷机工具(点击下载) MIUI V5 Fastboot开发版完整包(点击下载) 除了下载相
  • Photoshop人物腿部修饰之快速为美女瘦腿 Photoshop人物腿部修饰之快速为美女瘦腿 原图: 我学习的效果图: 本实例运用"钢笔工具"沿着人物腿部勾勤出小腿曲线,然后将绘制的路径加载为选区,再使用"液化"滤镜调整腿部的外形,完成本实例的制作. 步骤:
  • 国美整合电商业务 库巴品牌货消失 国美整合电商业务 库巴品牌货消失 12月3日,国美电器网上商城更名为国美在线,国美在线与库巴进行整合,实现后台统一管理和资源共享.整合后,国美在线定位于面向B2C业务的跨品类综合性电商购物网站;库巴主要负责平台运营. 但与外界猜测的"合并"不同,双方仍保持独立品牌,实行双品牌运作,整合的部分在于后端:信息系统共享.会员互动与共享.部分商品采购规模和效益共享.物流体系共享,以及信息服务共享. 至此,国美终于结束了电商业务重叠时代.亚马逊中国原总裁王汉华对腾讯科技说,在获取单个成本用户费用如此之高情况下,整合可大幅度降低成
  • 异性对你有好感的30个信号 异性对你有好感的30个信号 一.对你的工作.学习.生活情况极为关心,甚至对你的兴趣爱好也特别感兴趣. 二.主动向家人.亲友.同事.同乡等介绍你的各方面情况,并"先入为主"地加以评论. 三.遇事同你商量,征求你的意见,重大事情主动请你拿主意.想办法. 四.千方百计打听你过去的情况及你家人的情况.尤其对你的隐私特别感兴趣. 五.向别人介绍你时,往往夸大你的优点.长处,缩小或隐瞒你的缺点.错误,甚至把你的缺点也当成优点加以张扬. 六.因公外出或开会学习,总忘不了带给你一些小小的礼品.纪念品之类的东西. 七.对你的生日记
  • 《幽灵庄园的秘密4》第一关图文攻略 《幽灵庄园的秘密4》第一关图文攻略 幽灵庄园的秘密4第一关怎么过?这里还是有点难度的,还没通关的小伙伴一起来看看吧!相信大家都可以过关. 第一关 法国 巴黎 coffee shop拿园艺剪.榔头.检查桌子上红酒杯少道具,桌上的桌布下有东西但是现在拿不掉,车子里方向盘下面少车钥匙,阳台上少梯子. 到west tower用园艺剪把右下角绿色杂草剪掉拿梯子.楼梯左边扶手的灯下面拿油壶.楼梯上有道锁住的门,上楼梯拿车轮.撬棍.查看楼梯扶手的柱子上有裂纹需要东西把里面东西取出来,旁边有投币望远镜需要硬币. 去car shop出现对话,需要到
  • 天天跑酷和风小鹿与冰锋狼王技能属性对比 谁才是强者 天天跑酷和风小鹿与冰锋狼王技能属性对比 谁才是强者 天天跑酷最新一期的签到送道具已经更新出来了,在玩家们签到到第十八天的时候,玩家们可以获得和风小鹿这个坐骑了,今天小编就给各位玩家们来说说签到送的和风小鹿和冰锋狼王这两者之间的详细情况,下面一起跟随小编来看看吧. 给各位玩家们分享一下和风小鹿与冰锋狼王这两者之间的属性以及技能的对比情况. 天天酷跑冰锋狼王: 最高等级:120级 磁铁时间+3.7秒 飞币概率+37% 巨人时间+3.7秒 冲刺时间+3.2秒 浮梯时间+3.7秒 金币+71% 表现+72% 冰封狼王技能: 1.飞行得分加成120%, 2