java基本类型和包装类型的区别
来看一段代码:
Integer g = new Integer(0);
以上代码,两个对象虽然具有相同的值,但其引用指向的对象却不相同,因此会输出false。
再来看一段代码:
这个会输出什么呢?别急,再看一段代码:
如果你没有运行这两段代码,就知道答案,那么相信你对常量池有一定的了解了。
其实,当我们直接给一个Integer赋予一个int值的时候,它会调用一个valueOf()的方法。所以,如上代码就相当于:
Integer a = Integer.valueOf(0);
Integer的常量池是由-128至127组成。当我们给一个Integer赋的值在这个范围之类时就直接会从缓存返回一个相同的引用,所以a==b会输出true。而超过这个范围时,就会重新new一个对象。因此,f==d就会输出一个false。
现在我们再来看一段代码:
这个会输出什么呢?答案是true.
因为当在一项操作中混合使用基本类型与包装类型时,包装类型会自动拆箱。因此,e和d的比较其实就是int值的比较了。2、基本类型只有功能完备的值,而包装类型除了其对应的基本类型所有的功能之外,还有一个非功能值:null。
static Integer i;
你认为会输出什么呢?不知道?自己运行一下~~~~
其实这段代码并不能正确的运行,因为它会报一个NullPointException异常,为什么?因为在定义i的时候,它是Integer类的一个引用,而i没有初始化,就像所有对象引用一样,如果没有初始化那么就赋一个null值。既然现在i是一个null,那么上面已经提到,当混合使用基本类型与包装类型时,包装类会自动拆箱。现在i都没有指向任何对象,因此拆箱的时候就会报一个NullPointException异常。3、基本类型通常比包装类型更节省时间与空间。
看如下代码:
毫无疑问,这段代码能正常运行,但是花费的时间会比较长。因为,在声明sum变量的时候,一不小心声明为Long,而不是long。这样,在这个循环当中就会不断地装箱和拆箱,其性能也会明显的下降。如果把Long改为long,那么经过我的试验,这段代码所花费的时间将只有原来的1/5.
经过这三个比较,貌似感觉基本类型已经完胜了包装类型。但是在如下三个地方,包装类型的使用会更合理:1、作为集合中的元素、键和值。
2、在参数化类型中。比如:你不能这样写——ArryList<int>,你只能写ArrayList<Integer>.
3、在进行反射方法的调用时。
总之,当可以选择时候,基本类型是要优先于包装类型。基本类型更加简单、更加快速。
java基本类型和包装类型的区别的更多相关文章
- java基本类型和包装类型的区别以及object的公共方法
Java的类型分为两部分,一个是基本类型(primitive),如int.double等八种基本数据类型: 一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节 ...
- Java 基本类型和对象类型的区别
Java 基本类型和对象类型的区别 基本类型: int long byte float double char boolean short 对象类型: Integer Long Byte Float ...
- 【Java心得总结一】Java基本类型和包装类型解析
说到数据类型这个问题是一个基本的不能再基本的问题,我们当初编程入门第一课一般就是讲数据类型,而今天我想记录的是一个在Java中容易忽略的问题,即基本类型和包装类型. 一.基本类型出现的原因 我们都知道 ...
- Java 基本类型和包装类型
讲基本类型和包装类型之前,首先要介绍,装箱和拆箱 装箱:基本类型转化为包装类型 拆箱:包装类型转化为拆箱类型 为什么要有包装类型?Java是面向对象的语言,Java中一切都是对象除了基本数据类型,所以 ...
- java基本类型和包装类型
int 是基本类型,直接存数值 Integer是类,产生对象时用一个引用指向这个对象 Java把内存划分成两种:一种是栈内存,另一种是堆内存 在函数中定义的一些基本类型的变量和对象的引用变 ...
- Java中的基本类型和包装类型区别
首先看一下几个测试题,验证一下java中对基本类型和包装类型的理解,看看最后输出的答案对不对,答案在这篇博客中哦: // 第一题: 基本类型和包装类型 int a = 100; Integer b = ...
- java中基本类型和包装类型实践经验
至今,小菜用java快两年了,有些事,也该有个总结. 基本类型和包装类型的概念在本文不作赘述. 如果这两种类型直接使用,倒没什么值得讨论的,无非就是自动装箱拆箱,java可以让你感觉不到他们的存在,但 ...
- Spring MVC的各种参数绑定方式(请求参数用基础类型和包装类型的区别)(转)
1.基本数据类型(以int为例,其他类似): Controller代码: @RequestMapping("saysth.do") public void test(int cou ...
- java基本类型和封装类型区别及应用
1.基本类型只能按值传递,而每个基本类型对应的封装类是按引用传递的. 2.从性能上说java中的基本类型是在堆栈上创建的,而所有的对象类型都是在堆上创建的,(对象的引用在堆栈上创建).比如 Integ ...
随机推荐
- P2118 比例简化
P2118 比例简化 题解 这题考虑暴力枚举,枚举1~L的两个数 反正数据也很小 代码 #include<bits/stdc++.h> using namespace std; int a ...
- IDEA里面maven菜单解读
- redhat下配置SEED DVS6446开发环境3
1.运行arm_v5t_le-gcc,报错为: 64bit的Linux操作系统,无法运行32bit的应用程序 /lib/ld-linux.so.2: bad ELF interpreter: No s ...
- IP冲突如何把冲突的IP挤下去
把冲突IP挤下去的方法: ①进入网络和共享中心>本地连接>禁用. ②进入网络和共享中心>更改适配器设置>双击被禁用的连接,自动重新连接即可.
- 使用xUnits来实现单元测试
目录 前言 单元测试 xUnit 小结 附录 前言 从开始敲代码到现在,不停地都是在喊着记得做测试,记得自测,测试人员打回来扣你money之类的,刚开始因为心疼钱(当然还是为了代码质量),就老老实实自 ...
- LeetCode.1025-除数游戏(Divisor Game)
这是小川的第382次更新,第411篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第244题(顺位题号是1025).Alice和Bob轮流玩游戏,Alice首先出发. 最初 ...
- Ubuntu环境配置机器安装驱动
ubuntu_environment_config.md thead > tr > th { text-align: left; border-bottom: 1px solid; } t ...
- 深度学习入门者的Python快速教程 - 基础篇
5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...
- Akka系列(五):Java和Scala中的Future
前言....... 随着CPU的核数的增加,异步编程模型在并发领域中的得到了越来越多的应用,由于Scala是一门函数式语言,天然的支持异步编程模型,今天主要来看一下Java和Scala中的Futrue ...
- vue--生命周期演示
vue实例的生命周期:https://cn.vuejs.org/v2/guide/instance.html#%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA-Vue-%E5% ...