一个挺有意思的Java技术讨论

为什么Java中1000==1000为false而100==100为true?

这是一个挺有意思的讨论话题。

如果你运行下面的代码:

基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。

因此,后面一条语句也应该是false 。

这就是它有趣的地方了。如果你看去看 Integer.Java 类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象。

所以事情就成了,所有的小整数在内部缓存,然后当我们声明类似——

现在,如果我们去看valueOf()方法,我们可以看到:

如果值的范围在-128到127之间,它就从高速缓存返回实例。

所以…

我们可以得到true。

现在你可能会问,为什么这里需要缓存?

合乎逻辑的理由是,在此范围内的“小”整数使用率比大整数要高,因此,使用相同的底层对象是有价值的,可以减少潜在的内存占用。

然而,通过反射API你会误用此功能。

运行下面的代码,享受它的魅力吧:

分享一个Java学习q u n   六七八,二四一,五六三 每天晚上20:00都会开直播给大家分享Java知识和路线方法,裙里会不定期更新最新的教程和学习方法(进群送2018 Java学习教程),大家都是学习Java的,或是转行,或是大学生,还有工作中想提升自己能力的Java党,如果你是正在学习Java的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实,非常适合新手学习,有不懂的问题可以随时问我,工作不忙的时候希望可以给大家解惑

原文地址:https://www.cnblogs.com/q1622479435/p/9222686.html

时间: 2024-08-12 15:01:35

一个挺有意思的Java技术讨论的相关文章

挺有意思的一个bug

偶遇一奇怪的bug,型如$("tt").html("<div>"+0||Math.floor(Math.random()*100))+"</div>") 这个东西出现一个截取问题,看起来挺长的,实际上结果只有$("tt").html("<div>"+0)的结果,后面被截取了,想了半天有点云里雾里的,其实这就是一个细节的问题,或运算有个特点,是只要前部分为true结果就为t

今天早上 “百度知道”有人提问 正则 ,看着挺有意思的写了一个,写好后还没有回复,楼主就关闭了,哈哈自己好慢呀

在html中,<div style="text-align: center; margin-top: 20px;"><img src="sdsd.jpg" /> <a href="http://www.sdfs.com" target="_blank"> <img src="sdsd.gif" /> </a></div><div

一个有意思的 Java HashSet 问题

昨天,在百度的 java吧 看到有人问关于 HashSet 的问题.下面是他贴出的代码: 1 import java.util.HashSet; 2 3 public class JavaTest 4 { 5 public static void main(String[] args) 6 { 7 HashSet<Person> hs = new HashSet<Person>(); 8 Person p = new Person("张三", 21); 9 hs

一个牛人给java初学者的建议

给初学者之一:浅谈java及应用学java 不知不觉也已经三年了 从不知java为何物到现在一个小小的j2ee项目经理虽说不上此道高手,大概也算有点斤两了吧每次上网,泡bbs逛论坛,没少去java相关的版面总体感觉初学者多,高手少,精通的更少由于我国高等教育制度教材陈旧,加上java自身发展不过十年左右的时间还有一个很重要的原因就是java这门语言更适合商业应用所以高校里大部分博士老师们对此语言的了解甚至不比本科生多在这种环境下,很多人对java感到茫然,不知所措,不懂java能做什么即便知道了

就这么漂来漂去---一个毕业三个月的java程序员的裸辞风波

注:这并不是一片技术文章,而是记录了我这几个月经历的入职,裸辞,找工作的心路历程,简单介绍一个博主的情况,我是16年毕业生,校招进了一家北京的公司,java开发,和很多年轻人一样,干了一段时间,我发现这项工作和我的职业规划不符,于是,裸辞,从北京杀到上海,经历了一段找工作的艰辛,并顺利进入一家自己心仪的公司,这篇文章是深夜失眠时所写,倾诉的欲望难能可贵,风格可能偏文艺,行文略长,希望能给一些朋友一点启示,一点分享,一点鼓励,无它,轻喷. 在临下火车的时候,我瞥了一眼站台上的时钟,四点一刻,凌晨,

JAVA技术专题综述之线程篇(1)

本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:synchronized 本文将对以上内容进行讲解. 一:run()和start() 示例1: public cla ThreadTest extends Thread{public void run(){for(int i=0;i<10;i++){Syste

Java技术杂记

本文是临时记录在本子上Java技术的初步整理, 一来举一反三, 二来练习双拼打字. 发现双拼方案里的自然码挺好用的. 搜狗双拼方案对单韵母的字采用"o+韵母", 比如"安oj", "二or"等. 自然码则是"安an", "二er", 符合传统拼音思维. 但是, 自然码美中不足的是"昂ang"为了兼容双拼2个键出字的规则, 强行将a作声母, 原本是"ang"的"

Java技术与Java虚拟机

Java技术与Java虚拟机 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(Java API).它们的关系如下图所示: 图1 Java四个方面的关系 运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件).最后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器

十年架构师走在Java技术最前线看到的是什么?

一不小心工作10年了,一路从普通程序员成长为技术总监.作 为一个技术不是大牛事业也不是很成功的老程序员,我觉着还是要写一些什么,目前就职于携程互联网公司. 专注于java领域. 十年架构师走在Java技术最前线看到的是什么? 找准自身定位,切勿盲目选择方向 技术路线方面,要学比较热的主流技术好找工作的技术,在招聘网站上大概就能看出来社会上招聘量比较大的技术,在没工作阶段不要去赌冷门技术,赌输了还得是转 型回来学习更热门的技术来找工作挺悲摧的.运气也很重要,前些年塞班挺火的,你如果当时学塞班学的很