包装类型、装箱拆箱、基本类型速度比较

首先是包装类型

		Long sum = Long.valueOf(0);
		long t1 = System.currentTimeMillis();
		for (Long i = Long.valueOf(0); i < Integer.MAX_VALUE/2; i++) {
			sum += i;
		}
		t1 = System.currentTimeMillis() - t1;
		System.out.println("packaging took "+ t1 +" sum = "+ sum);

耗时:12759ms

装箱拆箱

		Long sum = 0L;

		long t0 = System.currentTimeMillis();
		for (long i = 0; i < Integer.MAX_VALUE/2; i++) {
			sum += i;
		}
		t0 = System.currentTimeMillis() - t0;
		System.out.println("Unboxing Boxing took "+ t0 +" sum = "+ sum);

耗时:6144ms

基本类型

		long s = 0L;
		long t2 = System.currentTimeMillis();
		for (long i = 0L; i < Integer.MAX_VALUE/2; i++) {
			s += i;
		}
		t2 = System.currentTimeMillis() - t2;
		System.out.println("prime took "+ t2 +" sum = "+ s);

耗时:581ms

速度之差立杆见影,基本类型的速度约是包装类型的21倍,装箱拆箱的10倍。

装箱拆箱那段代码是容易写错的地方,一个大小写之差。

优先使用基本类型的论点是有道理的。

包装类型、装箱拆箱、基本类型速度比较

时间: 2024-08-02 10:30:43

包装类型、装箱拆箱、基本类型速度比较的相关文章

NET中的类型和装箱/拆箱原理

谈到装箱拆箱,DebugLZQ相信给位园子里的博友一定可以娓娓道来,大概的意思就是值类型和引用类型的相互转换呗---值类型到引用类型叫装箱,反之则叫拆箱.这当然没有问题,可是你只知道这么多,那么DebugLZQ建议你花点时间看看楼主这篇文章,继续前几篇博文的风格--浅谈杂侃. 1. .NET中的类型 为了说明装箱和拆箱,那首先必须先说类型.在.NET中,我们知道System.Object类型是所有内建类型的基类.注意这里说的是内建类型,程序员可以编写不继承子自System.Object的类型,这

值类型&amp;引用类型,装箱&amp;拆箱

值类型:声明一个值类型变量,会在栈上分配一个空间,空间里存储的就是变量的值引用类型:声明一个引用类型变量,会在栈中分配一个空间,存储一个引用,这个引用指向了一个托管堆. 值类型:struct,枚举,数值类型,bool类型引用类型:数组,类,接口,委托(delegate),Object,string 可以看下下面的例子 public class Person { public string Name { get; set; } public int Age { get; set; } } publ

6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱

6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱 引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并说明一些有关它们的重要原理. 最后通过一个简单的示例代码说明装箱拆箱带来的性能损耗. 声明变量的内部机制 在.NET程序中,当你声明一个变量,将在内存中分配一块内存.这块内存分为三部分:1,变量名:2,变量类型:3,变量值. 下图揭示了声

深入C#内存管理来分析值类型&amp;引用类型,装箱&amp;拆箱,堆栈几个概念组合之间的区别

C#初学者经常被问的几道辨析题,值类型与引用类型,装箱与拆箱,堆栈,这几个概念组合之间区别,看完此篇应该可以解惑. 俗话说,用思想编程的是文艺程序猿,用经验编程的是普通程序猿,用复制粘贴编程的是2B程序猿,开个玩笑^_^. 相信有过C#面试经历的人,对下面这句话一定不陌生: 值类型直接存储其值,引用类型存储对值的引用,值类型存在堆栈上,引用类型存储在托管堆上,值类型转为引用类型叫做装箱,引用类型转为值类型叫拆箱. 但仅仅背过这句话是不够的. C#程序员不必手工管理内存,但要编写高效的代码,就仍需

基本类型包装类、自动装箱拆箱

基本类型包装类 public class Demo03 { public static void main(String[] args) { //字符串转基本数据类型 String str="12"; int strint=Integer.parseInt(str); System.out.println(strint+1);  //13 String s2="2.3"; double dou=Double.parseDouble(s2); System.out.p

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

Iterator(迭代器) 所有实现了Collection接口的容器都有一个iterator方法, 用来返回一个实现了Iterator接口的对象 Iterator对象称作迭代器, 用来方便的实现对容器内的元素的遍历 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级"对象,因为创建它的代价小. Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个I

Java ——Number &amp; Math 类 装箱 拆箱 代码块

本节重点思维导图 当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等 int a = 5000; float b = 13.65f; byte c = 0x4a; 需要使用对象,而不是内置数据类型的情形.Java 为每一个内置数据类型提供了对应的包装类. 所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类 Number 的子类  当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类.相似的

装箱 拆箱 枚举 注解 多态

装箱 拆箱的作用就是为了引用类型和基本数据类型的转化,装箱就是把基本数据类型转换成引用类型.拆箱则是将引用数据类型转换成基本数据类型 装箱:就是简而言之包装类型,将基本数据类型转换成引用数据类型. 拆箱:就是简而言之将引用类型转换成基本数据类型. 枚举:枚举主要就是声明一些列的常量,比如星期一,星期二,星期三等等,,,这些是常量不变的,那么做case的时候就可以选择这些枚举的变量名,从而实现代码精简 注解:注解的作用就是将一系列的类封装之后采用‘@’符号进行表示实现这个注解可以在对用的类,变量进

[Java5新特性]自动装箱/拆箱

自动装箱/拆箱概述 Java中具有基本类型(int,double,float,long,boolean,char,byte,short)和基本类型包装类(Integer,Double,Float,Long,Boolean,Char,Byte,Short),我们实现基本类型与包装类之间的转换基本有两种方式: 一种为JDK5之前的方式,比如Integer i = Integer.valueof(5);(这里5为基本类型int,Integer包装类利用valueof()方法将其转换为Integer类型