Java 常量池注意点

简介:

public static void main(String[] args)

{
    Integer i0 = 0;
    Integer i1 = 40;
    Integer i2 = 40;
    System.out.println(i1==i2);//true Integer包装类实现了常量池技术,默认会生成一个-128~127范围的一个常量池,i1,i2都是从常量池获取的40,指针指向同一个地址
    
    Integer i3 = new Integer(40);
    
    
    System.out.println(i1==i2+i0);//true  数学运算在栈中进行,运算时会进行拆箱操作,所以实际上比较的是基本数据类型40 == 40 + 0 的数值
    System.out.println(i1==i3+i0);//true  数学运算在栈中进行,运算时会进行拆箱操作,所以实际上比较的是基本数据类型40 == 40 + 0 的数值
    
    Integer i4 = new Integer(40);
    Integer i5 = new Integer(40);
    Integer i6 = new Integer(0);
    
    System.out.println(i4==i5+i6);//true  数学运算在栈中进行,运算时会进行拆箱操作,所以实际上比较的是基本数据类型40 == 40 + 0 的数值
    System.out.println(i4==i5);//false  引用类型,指向不同的地址
    

    Integer i7 = 1000;
    Integer i8 = 1000;
    System.out.println(i7==i8);//false  包装类超出了常量池范围
    
    System.out.println("===================");
    float f1 = 1.0f;
    float f2 = 1.0f;
    System.out.println(f1==f2);//true  基本数据类型浮点数比较数值
    
    Float f3 = 1.0f;
    Float f4 = 1.0f;
    System.out.println(f3==f4);//false  包装类型,且Float没有实现常量池,所以他们指向的引用时不同的
    
    Float f5 = 1.0f;
    Float f6 = 1.0f;
    Float f7 = 0.0f;
    System.out.println(f5==f6+f7);//true  基本类型的数学运算会拆包装
}
目录
相关文章
|
7月前
|
存储 Java 编译器
【面试知识】Java内存分配之常量池、堆、栈
【面试知识】Java内存分配之常量池、堆、栈
|
7月前
|
存储 安全 Java
36、Java 中的 String、StringBuilder、StringBuffer、字符串常量池和 intern 方法
36、Java 中的 String、StringBuilder、StringBuffer、字符串常量池和 intern 方法
74 0
|
存储 Java C++
【Java】String类的理解及字符串常量池
【Java】String类的理解及字符串常量池
193 0
【Java】String类的理解及字符串常量池
Java String 的 常量池 和 intern 方法 简析
Java String 的 常量池 和 intern 方法 简析字符串常量池和 intern 方法 先举个例子,我们创建 10000 个相同的 String,并且不使用常量池 String[] list = new String[10000]; for (int i = 0; i < 10000; i++) { list[i] = new String(new char[]{'a','b','c'}); } 结果是:每个 String 都用新开的对象,占用大量内存 现在我们这样创建,增加一个 map ,key 和 value 内容一样,每次取的时候,先检查一下 map 里面有没
|
存储 Java 编译器
正确理解和使用JAVA中的字符串常量池
研究表明,Java堆中对象占据最大比重的就是字符串对象,所以弄清楚字符串知识很重要,本文主要重点聊聊字符串常量池。Java中的字符串常量池是Java堆中的一块特殊存储区域,用于存储字符串。它的实现是为了提高字符串操作的性能并节省内存
241 0
正确理解和使用JAVA中的字符串常量池
|
存储 安全 Java
第36篇:Java 中的 String、StringBuilder、StringBuffer、字符串常量池和 intern 方法
🌿 字符串的底层是 char[],但是 char 数组和字符串不能等价。char 数组是 char 数组,字符串是字符串。 🌿 C 语言中是可以把 char 数组和字符串等价的 ✏️ 所有的 字符串字面量(如:"林哥")都是 String 类的实例 ✏️ String 对象创建完毕后,String 对象的字符内容是不可以修改的 🌿 String 对象的引用变量的指向是可以修改的
127 0
第36篇:Java 中的 String、StringBuilder、StringBuffer、字符串常量池和 intern 方法
|
存储 Java
Java 基础:String——常量池与 intern
Java 基础:String——常量池与 intern
58 0
Java 基础:String——常量池与 intern
|
存储 Java 编译器
Java 中方法区与常量池
Java 中方法区与常量池
254 0
Java 中方法区与常量池
Java 字符串常量池详解
Java 字符串常量池详解
421 0
Java 字符串常量池详解
|
存储 Java 程序员
Java中,那些关于String和字符串常量池你不得不知道的东西
Java中,那些关于String和字符串常量池你不得不知道的东西
155 0