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. EasyPR--一个开源的中文车牌识别系统

    我正在做一个开源的中文车牌识别系统,Git地址为:https://github.com/liuruoze/EasyPR. 我给它取的名字为EasyPR,也就是Easy to do Plate Reco ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  3. Linux ls

    linux.ls linux ls命令, 我觉得是所有接触linux系统, 首先学习的命令. 这个命令, 我也早就接触过了. 只是以前是学习类型的. 学了以后, 没有做到学以致用.可惜了. 现在这篇内 ...

  4. [大数据之Sqoop] —— 什么是Sqoop?

    介绍 sqoop是一款用于hadoop和关系型数据库之间数据导入导出的工具.你可以通过sqoop把数据从数据库(比如mysql,oracle)导入到hdfs中:也可以把数据从hdfs中导出到关系型数据 ...

  5. 如果用css的border属性画一个三角形

    假设页面中有个div,如何通过css做一个三角形.这是我们项目中用到的今天就稍微总结下.顺便说一句偷偷写博客的感觉还挺爽 div { width: 0; height: 0; border-top: ...

  6. iOS开发-捕获程序崩溃日志

    iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时 ...

  7. LR中的时间戳函数web_save_timestamp_param

    以前真没注意过后面看某个群有人说到这个函数一查,还真有,那么处理时间戳就简单很多了,我们经常在各种网站上看到类似于这样的时间戳 51Testing软件测试网"d bLq!uR&am ...

  8. FreeBSD_11-系统管理——{Part_7 - AUDIT}

    相关概念 EVENT 事件,审计系统计录的对象,包括用户登陆.网络与文件操作等各方面 CLASS 类,对具有相同或类似属性的事件的分組 RECORD 记录,审计系统生成的日志中的每一条信息 TRAIL ...

  9. 【Win 10应用开发】多窗口视图

    Windows App一般情况下,同一时刻只能有一个应用程序实例在运行,为了在特殊需求下可以同时呈现不同的UI,SDK提供了多视图操作支持. 应用程序可以创建新的应用视图,以新的视图为基础可以呈现与主 ...

  10. SmtpClient发邮件时为什么用MailMessage.From而不用MailMessage.Sender

    今天在看C#高级编程(第9版)的时候,在768页看到这样的一段代码 SmtpClient sc = new SmtpClient(); sc.Host = "邮箱服务器地址"; M ...