关于常量池-----小例子

package com.xdf;

import org.junit.Test;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

public class HashSetDemo {


    @Test
    public  void  testHashSet(){
        String  a="abc";
        String  b="abc";
        String  c=new String("abc");
        System.out.println(a.hashCode());
        System.out.println(b.hashCode());
        System.out.println(c.hashCode());
        System.out.println(a.hashCode()==b.hashCode());
        System.out.println(a.hashCode()==c.hashCode());

    }




    @Test
    public  void  testString(){

        /**
         *   01.在栈中开辟空间存储a
         *   02.拿“abc”字符串去常量池中查询有没有,因为我们是第一次创建,所以没有
         *   03.在常量池中开辟空间存储"abc"
         *   04.栈中的a就指向了常量池中的"abc"地址
         */
        String  a="abc";
        /**
         *   01.在栈中开辟空间存储b
         *   02.拿“abc”字符串去常量池中查询有没有,有
         *   03.在常量池中不会开辟空间存储
         *   04.栈中的b就指向了常量池中的"abc"原有地址
         */
        String  b="abc";
        /**
         *   01.在栈中开辟空间存储c
         *   02.拿“abc”字符串去常量池中查询有没有
         *   有:直接去堆中开辟空间保存"abc"
         *   没有:在常量池中开辟空间存储"abc",之后再去堆中开辟空间保存"abc"
         *   03.栈中的c指向了堆的"abc"
         *
         */
        String  c=new String("abc");
        System.out.println(a==b);
        System.out.println(a==c);
        System.out.println(a.equals(c));
    }



    @Test
    public   void  testIntern(){
        String  a="abc";
        String  b=new String("abc");
        String  c=new String("abc");
        System.out.println(a==b);
        System.out.println(a==b.intern()); //让b去常量池中寻找引用
        System.out.println(c.intern()==b.intern()); //让bc去常量池中寻找引用
    }
    @Test
    public   void  testFinal(){
        /**
         * 创建了3个变量
         *  常量
         */
         String  a="abc";
                 a="bcd";
      final   String  b="a";
      final   String  c="bc";
      System.out.println(a==(b+c));//不会自动拼接abc
    }


    /**
     *  -128 127 存在常量池中
     */
    @Test
    public  void  testInt(){
        Integer num1=128;
        Integer num2=128;
        Integer num3=new Integer(128);
        System.out.println(num1==num2);
        System.out.println(num1==num3);
    }

}
原文地址:https://www.cnblogs.com/SFHa/p/9673882.html