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 ...
随机推荐
- RF变量
变量作用域 变量类型 变量作用域 case中的变量 case内部 userkeyword中的变量 userkeyword内部 文件型suite里的变量 文件suite内部,其下case均可使用 目录型 ...
- leetcode 215 第K个最大的元素
此问题可转化为Top K问题进行考虑,当用小顶堆选出K个最大值时,堆顶的元素即为第k大的元素 class Solution { public: int findKthLargest(vector< ...
- leetcode 72. 编辑距离
/***** 定义状态: DP[i][j]其中i表示word1前i个字符,j表示Word2前i个字符 DP[i][j]表示单词1前i个字符匹配单词2前j个字符,最少变换次数: 状态转移: for i: ...
- 代码实现:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
import java.util.Scanner; //编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n public ...
- WPF图标拾取器
<Grid x:Name="LayoutRoot"> <Border BorderBrush="> <Border.Effect> & ...
- ATP检测 BAPI BAPI_MATERIAL_AVAILABILITY
*****ATP检测 DATA: END_RLT LIKE EBAN-LFDAT, NOT_AVAILABLE, AVAILABLE( ...
- linux系统导入证书
https://blog.csdn.net/fy573060627/article/details/52872740 .linux 访问 https 证书问题 [root@kube-node2 ~]# ...
- 使用svctraceviewer查看WCF服务异常信息
这两天遇到一个问题,调用一个WCF服务的时候,服务器端正常的返回了数据,但是客户端却遇到了一场 System.ServiceModel.CommunicationException: The unde ...
- 【VS开发】解决位图缩放失真
当用以下函数加载一张位图时,当窗口发生重绘更改大小时,位图将失真: CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP2); BITMAP bmp; bit ...
- value(C# )
上下文关键字 value 用在普通属性声明的 set 访问器中. 此关键字类似于方法的输入参数. 关键字 value 引用客户端代码尝试分配给属性的值. 在以下示例中,MyDerivedClass 有 ...