• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

下面这图里,最后一段话,看不懂啊,大神打点代码演示看看啊

java的八种基本类型(Byte Short、Integer、Long、Character、Boolean、Float、Double),除Float及Double意外,其它六种都实现了常量池,但是他们只在大于等于-128且小于等于127时才能使用常量池,如果不在此范围内,则会new一个出来,保存在堆内存中。

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

常量池你可以理解成 一块内存空间,
说明一个知识点, == 这个运算符号,如果a == b 是true的话,说明 a和b指向的同一个对象,两个对象不相等的话他们运行 == 运行结果一定是false(注意是对象不相等不是值不相等)
下面 上代码:
publicclassTest{        publicstaticvoidmain(String[]args){                Integeri1=1;                Integeri2=1;        //i2在-128~127直间,等价于i2=i1                System.out.println(i1==i2);                /**                *输出结果true                */                Integeri3=128;//i3不在-128~127直间,等价于i3=newInteger(128);                Integeri4=128;//i4不在-128~127直间,等价于i4=newInteger(128);                System.out.println(i3==i4);                /**                *输出结果false                */                        }                }就拿Integer举例说吧,上边代码Integer i1 = 1; 当i1创建出来的时候编译器发现他在-128~127这个范围里,所以会把它暂存在一块固定的内存中,当你再定义 Integer i2 = 1的时候,编译器会去常量池中找看看你之前有没有定义过值为1的Integer对象,如果找到了就直接拿来用,没有才会创建新的,所以 这里 i1 和i2指向了同一个对象,故System.out.println(i1 == i2); 为true, 如果你在后边再创建i5, i6,i7,i8。。。创建多少个,它都指向这一个对象,他们进行==运算结果都是true

当你定义i3 = 128时,编译器发现他不在-128~127这个范围内,因此就会直接new一个新的Integer对象出来,同理定义i4 = 128时也一样,所以 i3 == i4运算结果为false
这样做的目的是节省空间提高程序运行效率
题外话:如果想比较值的话 用i3.intValue() == i4.intValue() 这样结果是true

使用道具 举报

发新帖

发布任务需求已有1031168位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!