当前位置: 首页 > news >正文

常量池总结

常量池包含8种基本数据类型(byte、short、int、float、long、double、char、boolean)、部分包装类Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现)、对象型(如String及数组)还包含一些以文本形式出现的符号引用,比如:(类和接口的全限定名、字段的名称和描述符、方法和名称和描述符)

其中Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127时才可使用对象池,也即对象不负责创建和管理大于127的这些类的对象

如下:

package test;

public class Test1 {

    public static void main(String[] args) {

        Integer i1 = new Integer(1);
        Integer i2 = new Integer(1);
        // i1,i2分别位于堆中不同的内存空间
        System.out.println(i1 == i2);// 输出false
        Integer i3 = 1;
        Integer i4 = 1;
        // i3,i4指向常量池中同一个内存空间
        System.out.println(i3 == i4);// 输出true
        // 很显然,i1,i3位于不同的内存空间
        System.out.println(i1 == i3);// 输出false

        // 0~127的整型包装类从常量池取
        Integer i5 = 127;
        Integer i6 = 127;
        System.out.println(i5 == i6);// 输出true
        // 超过127的包装类型不从常量池取
        Integer i7 = 128;
        Integer i8 = 128;
        System.out.println(i7 == i8);// 输出false
        // 基本数据类型从常量池取
        int i9 = 128;
        int i10 = 128;
        System.out.println(i9 == i10);// 输出true
        // 浮点型的包装类不从常量池取
        Double d1 = 1.00;
        Double d2 = 1.00;
        System.out.println(d1 == d2);// 输出false

        // s1,s2分别位于堆中不同空间
        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1 == s2);// 输出false
        // s3,s4位于池中同一空间
        String s3 = "hello";
        String s4 = "hello";
        System.out.println(s3 == s4);// 输出true
    }
}

 

注意:

 

 

package test;

public class Test1 {

    public static void main(String[] args) {

        String s1 = "Programming";
        String s2 = new String("Programming");
        String s3 = "Program";
        String s4 = "ming";
        String s5 = "Program" + "ming";
        String s6 = s3 + s4;
        System.out.println(s1 == s2);//false
        System.out.println(s1 == s5);//true
        System.out.println(s1 == s6);//false
        System.out.println(s1 == s6.intern());//true
        System.out.println(s2 == s2.intern());//false


    }
}

 

最后

细节决定成败,写代码更是如此。

在JDK5.0之前是不允许直接将基本数据类型的数据直接赋值给其对应地包装类的,如:Integer i = 5; 

但是在JDK5.0中支持这种写法,因为编译器会自动将上面的代码转换成如下代码:Integer i=Integer.valueOf(5);  

这就是Java的装箱.JDK5.0也提供了自动拆箱. Integer i =5;  int j = i; 

转载于:https://www.cnblogs.com/wzk-0000/p/10101271.html

相关文章:

  • html2canvas用法的总结(转载)
  • Confluence 6 删除一个空间
  • 每天一个设计模式之命令模式
  • ESXi虚拟机的磁盘格式
  • Nmap的详细使用
  • js 如何判断数组元素是否存在重复项
  • Kubernetes高可用负载均衡与集群外服务访问实践
  • K8S-网络模型、POD/RC/SVC YAML 语法官方文档
  • C# 图解教程 第四章 类的基本概念
  • [译] Android 内核控制流完整性
  • codeforces 1093 题解
  • IIS 设备未就绪。
  • 性能常用指标(重点)
  • python的内存回收机制即gc模块讲解
  • 前端工程师的 2018 年总结 | 掘金年度征文
  • ➹使用webpack配置多页面应用(MPA)
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CentOS 7 防火墙操作
  • Flex布局到底解决了什么问题
  • mysql_config not found
  • rc-form之最单纯情况
  • Shell编程
  • Vue组件定义
  • Yeoman_Bower_Grunt
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 实习面试笔记
  • 在weex里面使用chart图表
  • 终端用户监控:真实用户监控还是模拟监控?
  • 第二十章:异步和文件I/O.(二十三)
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #Z2294. 打印树的直径
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (06)金属布线——为半导体注入生命的连接
  • (1)SpringCloud 整合Python
  • (11)MSP430F5529 定时器B
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)为C# Windows服务添加安装程序
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Remoting学习笔记(三)信道
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net经典笔试题
  • .NET业务框架的构建
  • @Builder用法
  • @Responsebody与@RequestBody
  • [04] Android逐帧动画(一)