当前位置: 首页 > 编程日记 > 正文

Integer 和 int 比较的特殊之处

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

第一个例子: 
假设我们同时定义 
int a = 3; 
int b = 3;

编译器先处理int a = 3;
首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。
接着处理int b =3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。
这样,就出现了a与b同时均指向3的情况。这时,如果再令a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。

第二个例子 :
栈数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b, 它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。

String是一个特殊的包装类数据。可以用: 
String str = new String(“abc”); 
String str = “abc”;

两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对 String类的对象引用变量str,然后查找常量池有没有存放”abc”,如果没有,则将”abc”存放进常量池,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。解释:常量池属于方法区的一部分
比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。

第三个例子 :
String str1 = “abc”; 
String str2 = “abc”; 
System.out.println(str1==str2); //true 
可以看出str1和str2是指向同一个对象的。

String str3 =new String (“abc”); 
String str4 =new String (“abc”); 
System.out.println(str4==str3); // false 
用new的方式是生成不同的对象。每一次生成一个。

因此用第一种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间.
对于String str = new String(“abc”);的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。所以new出来的对像他们的堆内存地址不相同,如果想对两个在堆内存中的变量进行比较的话,我们可以使用String类提供的equal()方法
三:Integer和int的特殊之处
int是基本数据类型,初始值是0;Integer是int的包装类,初始值是null 
当讲一个int的值赋给Integer对象的时候,会进行自动装箱 
Integer a = 10; 
其实进行的是: 
Integer a = Integer.valueOf(10);

我们看一下jdk提供的api查看一下Integer的源代码:

/*** Returns an {@code Integer} instance representing the specified* {@code int} value.  If a new {@code Integer} instance is not* required, this method should generally be used in preference to* the constructor {@link #Integer(int)}, as this method is likely* to yield significantly better space and time performance by* caching frequently requested values.*  * This method will always cache values in the range -128 to 127,* inclusive, and may cache other values outside of this range.*  * @param  i an {@code int} value.* @return an {@code Integer} instance representing {@code i}.* @since  1.5*/
public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
}
private static class IntegerCache {private IntegerCache() {}static final Integer cache[] = new Integer[-(-128) +127 + 1];static {for (int i = 0; i < cache.length; i++) {cache = new Integer(i - 128);}}
}

当数值介于-128到127之间的数,会进行缓存所以Integer a = 127,Integer b = 127 ;a == b (true)。但是当数值大于127的时候两个对象的内存位置不一样。
int和Integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比(因为在Integer进行了拆箱之后:是int和int 相比;拆箱方法:intValue())
但是Integer a = new Integer(12); Integer b = new Integer(12);不相等

转载于:https://my.oschina.net/haitaohu/blog/3025672

相关文章:

偷偷mark下一个

java书单thinking in java java战 Effective Java 深入了解JVM虚拟机 java性能优化权威指南 JSR133 Google Guava官方教程版权声明&#xff1a;本文博主原创文章&#xff0c;博客&#xff0c;未经同意不得转载。 转载于:https://www.cnblogs.com/hrhguanli/p/4915607.html

unix odbc php 连接sqlserver,Ubuntu下通过unixODBC连接MS SqlServer2005

一、下载相关软件 unixODBC、freetds(1) Linux系统的ODBC unixODBC-2.2.8.tar.gz (http://www.unixodbc.org)(2) 连接SQLServer或Sybase的驱动 freetds-0.62.4.tar.gz (http://www.freetds.org)二、安装和配置(1) 安装unixODBC# tar vxzf unixODBC-2.2.8.tar.gz# cd un…

Apache htpasswd命令

一、简介 htpasswd是apache的一个工具&#xff0c;该工具主要用于建立和更新存储用户名、密码的文本文件&#xff0c;主要用于对基于http用户的认证。 二、语法 Usage:htpasswd [-cimBdpsDv] [-C cost] passwordfile usernamehtpasswd -b[cmBdpsDv] [-C cost] passwordfile use…

l2-22(重排链表)

题目链接&#xff1a;https://pintia.cn/problem-sets/994805046380707840/problems/994805057860517888 题意&#xff1a;给定链表L1->L2->...->Ln&#xff0c;要求按Ln->L1->Ln-1->L2->...的格式输出。 思路&#xff1a;水模拟&#xff0c;按照要求做就…

深入研究敏捷的成功因素

Scott W. Ambler针对Dr. Dobbs网站上发布的敏捷成功因素进行了一些分析讨论&#xff0c;那些敏捷成功因素来自2011年11月的敏捷现状调查结果。据此文所说&#xff0c;此次调查的两个目标是&#xff1a; 为了探索与敏捷项目成功有关的实施策略&#xff0c;例如对单一敏捷团队的行…

php 多条数据更新数据类型,PHPdoc @param中的两个或多个数据类型

好的,我有这个phpdoc上面的我的类方法/*** this a function that translates the text* param string|boolean $lang if string the string given in the parameter will be the language code that will represent the language desired, if true, this will translate based …

快速构建Spring Cloud工程

spring cloud简介 spring cloud为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。另外说明spring cloud是基于spr…

win10红色警戒黑屏解决

相信很多80&#xff0c;90后的同学们都喜欢在代码之余打打红色警戒 但是苦于win10差劲兼容性&#xff0c;每次下个红色警戒or尤里复仇不是弹框就是黑屏 今天笔者给出一个完美究极解决方案 请注意&#xff1a; 1&#xff01;红色警戒中把Ra2.exe和Game.exe右键兼容性调到Win XP …

html超链接button

1.如果让本页转向新的页面则用&#xff1a; <input typebutton οnclick"window.location.href(连接)"> 2.如果需要打开一个新的页面进行转向&#xff0c;则用&#xff1a; <input typebutton οnclick"window.open(连接)">转载于:https://www…

低版本jdbc连接高版本oracle,转:oracle11g的JDBC连接 URL和之前的版本有一定的区别...

今天安装了oracle11g后&#xff0c;写了JDBC测试程序&#xff0c;一直都连接不上&#xff01;一直找不到原因后来读了一下安装文件中的Readme.txt文档&#xff0c;汗啊&#xff01;这个版本居然把url的访问方式改变了&#xff1a;Some Useful Hints In Using the JDBC Drivers-…

Android studio 获取每次编译apk时的日期

项目中需要获取apk的编译日期&#xff0c;首先肯定是用手动的方式获取&#xff0c;但这样容易遗忘&#xff0c;怎么样通过代码的方式获取呢&#xff1f; 其实android 为我们提供了一个BuildConfig的类&#xff0c;android 每次编译的时候都会自动生成 一次BuildConfig 类&#…

明文存密码成惯例?Facebook 6 亿用户密码可被 2 万员工直接看

近日&#xff0c;外媒发布了一份互联网安全的调研报告&#xff0c;报告中称Facebook曾将6亿用户的账号密码使用明文存储&#xff0c;且可以被Facebook内部员工随意搜索查看。据Facebook方面的消息人士称&#xff0c;纯文本存档的用户密码可追溯到2012年&#xff0c;在这期间有超…

pthreads 的学习

多线程学习参考的网站&#xff1a; http://www.ibm.com/developerworks/cn/linux/l-pthred/ 初探线程——pthread_create http://www.cnblogs.com/huangwei/archive/2010/05/19/1739593.html 转载于:https://www.cnblogs.com/nemo2011/archive/2012/05/02/2479163.html

Oracle不加IP无法登录,Oracle 无法通过IP连接问题

1.安装目录:D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN2.listener.ora(里面的localhost或127.0.0.1改成机器名)# listener.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora# Generated by Oracle…

巧用gh-pages分支发布自己的静态项目

大家都知道可以通过github pages 发布自己的静态博客&#xff0c;然后通过 username.github.io 可以访问。例如我的博客可以通过 nqmysb.github.io 访问&#xff0c;不过我的已经绑定域名 https://liaocan.top &#xff0c;所以会直接跳转到域名显示。但是我们通常有很多其他的…

【读书笔记】iOS-网络-解析响应负载

Web Service可以通过多种格式返回结构化数据&#xff0c; 不过大多数时候使用的是XML与JSON。也可以让应用只接收HTML结构的数据。实现了这些Web Service或是接收HTML文档的应用必须能解释这种结构化数据并将其转换为对于应用上下文有意义的对象。 一&#xff0c;XML 使用原生解…

What Are Words(一诺千金)

曲名&#xff1a;What Are Words&#xff08;一诺千金&#xff09;Anywhere you are, I am near Anywhere you go, Ill be there Anytime you whisper my name, youll see How every single promise I keep Cause what kind of guy would I be If I was to leave when you need…

oracle 插入 基准测试,oracle proc 插入操作性能优化实践

场景&#xff1a;student 表中 10万条数据。从 student 表中取出所有数据&#xff0c;插入到 student_his 表中优化方法&#xff1a;1.批量插入(效果明显)2.批量查询(效果不明显)3.批量提交(效果不明显)4.预编译 sql 语句(效果不明显)效果&#xff1a;10万条数据&#xff0c;普…

240个jquery插件

240个jquery插件 http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/File upload Ajax File Upload.jQUploader.Multiple File Upload plugin.jQuery File Style.Styling an input type file.Progress Bar Plugin. Form Validation jQuery Valida…

sql 优化 tips

索引就是排序 outer join笛卡儿积, inner join看情况。 可以用临时表加update的方式把outer join 替换成inner join提高性能。用union代替where中的or 和join(不同表时)join的列有索引&#xff0c;select 中的列能被索引覆盖到&#xff0c;消除执行计划中的lookup(lookup有时会…

第24课 《前端之路,以不变应万变》

今天的内容有些借鉴于业内大佬的内容&#xff0c;由于本人技术实在太渣&#xff0c;几乎没有可以用来演讲的素材。抱歉 大家好&#xff0c;我是来自存勖科技的Rocken。我今天演讲的内容是&#xff1a;前端的未来。大家都知道&#xff0c;前端所依托的基础直到上世纪九十年代才出…

php hasattribute,PHP DOMElement hasAttribute()用法及代码示例

DOMElement::hasAttribute()函数是PHP中的内置函数&#xff0c;用于了解具有特定名称的属性是否作为元素的成员存在。用法:bool DOMElement::hasAttribute( string $name )参数&#xff1a;该函数接受单个参数$name&#xff0c;该参数保存属性的名称。返回值&#xff1a;如果成…

搭建turnserver

参考文件&#xff1a; http://blog.csdn.net/kl222/article/details/20145423 为什么要搭建TURN服务器&#xff1f; 因为我们编写的sip客户端再和南瑞的sip服务器进行通信的时候&#xff0c;中间经过一个安全平台&#xff0c;这个安全平台具有NAT和防火墙功能。RTP和RTCP包传递…

【Android开发】:在任意目录执行NDK编译

2019独角兽企业重金招聘Python工程师标准>>> 文以简单的例子讲述如何在任意目录把自己写的C代码使用NDK提供的交叉编译该工具来编译成Android可使用的静态库/动态库。 1. 准备环境 首先&#xff0c;你得安装了Android的NDK编译工具&#xff0c;假设你的NDK的根目录在…

SurfaceView 间取得焦点

在SurfaceView中我们的onKeyDown虽然重写了view的函数&#xff0c; 但一定需要我们在初始化的时候去声明焦点 //添加这个来取得按健事件this.setFocusable(true);this.setFocusableInTouchMode(true);this.requestFocus();如果这些方法&#xff0c;会造成按键无效&#xff0c;提…

Oracle字符串转BooIean,利用Java的多线程技术实现数据库的访问.pdf

利用Java的多线程技术实现数据库的访问.pdf第 卷第 期 计算机应用22 12 Voi .22 , No . 12年 月2002 12 Computer Appiications Dec . , 2002文章编号&#xff1a; ( )1001 - 9081 2002 12 - 0121 - 03利用Java 的多线程技术实现数据库的访问刘 巍&#xff0c;唐学兵(武汉大学 …

Linux音频设备驱动

在Linux中&#xff0c;先后出现了音频设备的两种框架OSS和ALSA&#xff0c;本节将在介绍数字音频设备及音频设备硬件接口的基础上&#xff0c;展现OSS和ALSA驱动的结构。17.1&#xff5e;17.2节讲解了音频设备及PCM、IIS和AC97硬件接口。17.3节阐述了Linux OSS音频设备驱动的组…

japid-controller自动绑定的数据类型

参考文献&#xff1a;http://www.playframework.org/documentation/1.2.3/controllers 当参数名和HTTP请求中的参数名&#xff08;即界面中的name&#xff09;相同时&#xff0c;后台Controller可以直接获取该变量的值。变量分两大类&#xff1a; 1. Simple types 所有的基本数…

NAT,Easy IP

R3配置 [V200R003C00] #snmp-agent local-engineid 800007DB03000000000000snmp-agent #clock timezone Indian Standard Time minus 05:13:20clock daylight-saving-time Day Light Saving Time repeating 12:32 9-1 12:32 11-23 00:00 2005 2005 #drop illegal-mac alarm #…

linux用户在哪个文件夹,LINUX中用命令成功建立一个用户后信息会记录在哪个文件中...

LINUX中用命令成功建立一个用户后信息会记录在哪个文件中发布时间:2007-07-28 10:14:57来源:红联作者:MPiops增加用户帐号后新建用户的命令十分简单&#xff0c;在命令行下使用 useradd 命令&#xff1a;useradd david该命令做了下面几件事&#xff1a;1)在 /etc/passwd 文件中…