int作为java中元老级的数据类型,可谓无处不在,自从jdk5诞生了Integer,从此不在孤单。

为什么要设计Integer呢?它与int有什么区别?

一、Integer是int的包装类型,是引用类型,int是值类型。

衍生出来的特点就是:

(1)Integer比较时比较地址,int比较时比较值,Integer与int比较又如何呢?留个疑问,下面再论。

(2)以对象的属性存在时,Integer初始默认值为null,int为0;在方法作用域内,变量是要手动进行初始化滴,若只声明,在后面使用的时候编译器是通不过的。

二、出于数据转换的考虑

Integer提供了两种方法,parseInt和valueOf,看下面:

String s = "1"

int a = Integer.parseInt(s)

Integer b = Integer.valueOf(s)

Integer c = Integer.valueOf(1)

1)parseInt接收String类型的入参,返回int

2)valueOf接收String和int类型的入参,返回Integer

ps:当然,你这样写也是成立的:int d = Integer.valueOf(s),编译器进行了隐式拆箱,将Integer转化为了int。

三、比较

1、int与Integer

int a = 1;

Integer b = 1;

a==b为true,b先进性拆箱,与a比较的是值

2、 Integer与Integer

Integer a = new Integer(1)

Integer b = 1

Integer c = 1

a==b? false

解:a存在于内存堆中,b存在于常量池中,地址不同。任何new都会产生新的对象;Integer b = 1进行了隐式的装箱(调用了valueOf方法)

b==c? true

解:在内存中,会有一块叫做常量池的区域,专门存放b和c这种形式定义的对象,初始化时会先去常量池中寻找1,若已经存在,直接指向1,若不存在,生成对象1放入常量池。

再看这个:

Integer d = 128

Integer e = 128

d==e?false

为什么这个不适合上面的常量池说法了呢?原因在于常量池指定了数值范围:-128~127。

超过了这个范围,就会生成新的对象。

3、比较两个Integer的值

Integer a = new Integer(1)

Integer b = new Integer(2)

可以这样:a.intValue() == b.intValue() 或者 a.equals(b)

四、获取最大值和最小值如此简单

int a = Integer.MAX_VALUE; 2^31-1

int b = Integer.MIN_VALUE; -2^31

五、使用场景的限制

1)很多方法参数就只接收对象类型

2)泛型只支持对象类型

3)考虑到数据库设计中某些数值列可以为null,持久话对象中使用引用类型,可接收null值

关注老姜谈技术,微信号:helojava,或者扫描下面二维码。


每日一帖,技术鸡汤。

int与Integer的爱恨情仇的更多相关文章

  1. pytorch和tensorflow的爱恨情仇之基本数据类型

    自己一直以来都是使用的pytorch,最近打算好好的看下tensorflow,新开一个系列:pytorch和tensorflow的爱恨情仇(相爱相杀...) 无论学习什么框架或者是什么编程语言,最基础 ...

  2. Menu与ActionBar的爱恨情仇

    最近在开发一款音乐播放器,在开发过程中遇到了一点小麻烦,通过android API搞清楚了Menu与ActionBar的爱恨情仇,写了个小Demo祭奠一下那些年我们陷进去的坑,有不对的地方请大神们批评 ...

  3. 注解:大话AOP与Android的爱恨情仇

    转载:大话AOP与Android的爱恨情仇 1. AOP与OOP的区别 平时我接触多的就是OOP(Object Oriented Programming面向对象).AOP(Aspect Oriente ...

  4. 对json的爱恨情仇

    本文回想了对json的爱恨情仇. C++有风险,使用需慎重. 本文相关代码在:http://download.csdn.net/detail/baihacker/7862785 当中的測试数据不在里面 ...

  5. String、StringBuilder、StringBuffer的爱恨情仇

    第三阶段 JAVA常见对象的学习 StringBuffer和StringBuilder类 (一) StringBuffer类的概述 (1) 基本概述 下文以StringBuffer为例 前面我们用字符 ...

  6. pytorch和tensorflow的爱恨情仇之定义可训练的参数

    pytorch和tensorflow的爱恨情仇之基本数据类型 pytorch和tensorflow的爱恨情仇之张量 pytorch版本:1.6.0 tensorflow版本:1.15.0 之前我们就已 ...

  7. web移动端fixed布局和input等表单的爱恨情仇 - 终极BUG,完美解决

    [问题]移动端开发,ios下当fixed属性和输入框input(这里不限于input,只要可以调用移动端输入法的都包括,如:textarea.HTML5中contenteditable等),同时存在的 ...

  8. 除了love和hate,还能怎么表达那些年的“爱恨情仇”?

    实用英语 帮你全面提高英语水平 关注 童鞋们每次刷美剧的时候,相信都会被CP感满满的男女主角虐得体无完肤吧. 可是,一到我们自己表达爱意或者恨意的时候,却苦于词穷,只会用love, like, hat ...

  9. [转帖]探秘华为(一):华为和H3C(华三)的爱恨情仇史!

    探秘华为(一):华为和H3C(华三)的爱恨情仇史! https://baijiahao.baidu.com/s?id=1620703498823290828&wfr=spider&fo ...

随机推荐

  1. 企业IT管理员IE11升级指南【3】—— IE11 新的GPO设置

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  2. EasyPR--开发详解(2)车牌定位

    这篇文章是一个系列中的第三篇.前两篇的地址贴下:介绍.详解1.我撰写这系列文章的目的是:1.普及车牌识别中相关的技术与知识点:2.帮助开发者了解EasyPR的实现细节:3.增进沟通. EasyPR的项 ...

  3. 干掉Unity3D

    我为什么想干掉Unity3D? 这个问题容我不答,每个做技术的人总有一些完美主义. 你使用u3d的过程中是不是痛并快乐着呢. 就从两个国内具有相当普遍性的痛点说起. il2cpp,unity作出了这个 ...

  4. 将word文档A表格中的内容拷贝到word文档B表格中

    Function IsFileExists(ByVal strFileName As String) As Boolean ) <> Empty Then IsFileExists = T ...

  5. logistic回归

    logistic回归 回归就是对已知公式的未知参数进行估计.比如已知公式是$y = a*x + b$,未知参数是a和b,利用多真实的(x,y)训练数据对a和b的取值去自动估计.估计的方法是在给定训练样 ...

  6. Module-Zero之组织单元(OU)管理【新增】

    返回<Module Zero学习目录> 概览介绍 OrganizationUnit实体 OrganizationUnit管理者 公共用例 设置 概览介绍 组织单元(Organization ...

  7. JavaScript算法(归并排序与快速排序)

    归并排序与快速排序这两个算法放在一起,也是因为时间复杂度都是对数级别的. 目前看过的资料,归并排序看<学习JavaScript数据结构与算法>介绍的归并排序吧,快速排序直接看百度百科,讲的 ...

  8. 【敏捷开发】Android团队开发规范

    这里说的开发规范分成目录规范,项目和包名的命名规范,类,方法,变量和常量的命名规范这几种. 目录规范 目录规范——在开发中整体文件夹组织结构. Requirement——需求文档文件夹 Design— ...

  9. show master/slave status求根溯源

    show master/slave status分别是查看主数据库以及副数据库的状态,是一种能查看主从复制运行情况的方式. 这里仅仅讨论linux下的nysql5.7.13版本的执行情况 一.show ...

  10. 3D旋转菜单

    今天来个3D旋转菜单,是纯css3实现的,主要用到transform,transition,backface-visibility. 主要是transform这个变换,它是今天猪脚. transfor ...