首页 > 系统相关 >String 内存地址透析

String 内存地址透析

时间:2023-01-05 17:36:10浏览次数:39  
标签:11 String System a2 b2 new 内存地址 透析

public static void main(String[] args) {
        String a1 = new String("1") + new String("1");
        a1.intern();
        String b1 = "11";
        System.out.println(a1 == b1);
        System.out.println(Integer.toHexString(System.identityHashCode(a1)) + "---" + Integer.toHexString(System.identityHashCode(b1)));

        String a2 = new String("11");
        a2.intern();
        String b2 = "11";
        System.out.println(a2 == b2);
        System.out.println(Integer.toHexString(System.identityHashCode(a2)) + "---" + Integer.toHexString(System.identityHashCode(b2)));
    }

执行结果

true
6a6824be---6a6824be
false
5c8da962---6a6824be

说明:

一、

  new String("1") + new String("1") 相当于 new String(new char[]{'1','1'}); 所以产生了一个char数组对应的字符串对象“11”

  intern()的作用是:如果字符串s在字符串常量池中存在对应字面量,则intern()方法返回该字面量的地址;如果不存在,则创建一个对应的字面量,并返回该字面量的地址

  此时静态常量池中不存在"11",所以将a1的地址同步到静态常量池中

  当b1="11"时,新建了一个指向"11"的引用b1  所以b1=a1

二、

  new String("11") 相当于先在静态常量池中创建了对象"11",然后基于静态常量池中"11"对象新生成了一个对象,并将a2指向新对象

  此时静态常量池中存在"11",所以intern()没有效果

  当b2 = "11"时,新建了一个指向"11"的引用b2,所以指向"11"的引用b2和新生成的对象a2不相等,b2!=a2

  

标签:11,String,System,a2,b2,new,内存地址,透析
From: https://www.cnblogs.com/xiufengd/p/17028329.html

相关文章

  • 为什么Python中的re.compile()输入要用raw string(r'')?
    在re这一模块的官方文档的解释如下Regularexpressionsusethebackslashcharacter('')toindicatespecialformsortoallowspecialcharacterstobeusedwitho......
  • JSON.stringify踩坑
    JSON.stringify将忽略所有未定义的对象属性。constuser={name:'Stanko',phone:undefined};user.phone;//->undefinedconststringifiedUser=JSON.stringi......
  • String.split()用法的一点经验
    C#中使用split分割字符串的几种方法--第一种方法:strings=abcdeabcdeabcde;string[] sArray=s.Split('c') ;foreach(......
  • string容器3
    string的赋值操作功能描述:给string字符串进行赋值赋值的函数原型:1string&operator=(constchar*s);//char*类型字符串赋值给当前的字符串2string&operator=(co......
  • java基础toString()方法
    1.Object()类下的toSting()方法Java默认的toString方法来自Object类 在Java中每个类都直接或者间接继承Object类,toString()方法同样是来自于Object类在没有重写toString......
  • string容器2
    string构造函数1string();//创建一个空的字符串例如stringstr;2string(constchar*s)//使用字符串s进行初始化3string(conststring&str);//使用一个string对......
  • string容器1
    string基本概念本质:string是C++风格的字符串,而string本质是一个类string和char*区别:char*是一个指针string是一个类,类内部封装了char,管理这个字符串,是个char型的......
  • SqlServer的substring用法
    SUBSTRING(expression,start,length) 参数expression字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。 start整数......
  • byte[] 转Hex String
    一、一个字符串转byte数组怎么转?byte[]byteArray=String.getBytes();二、又想把生成的数组转回字符串怎么办?StringcovertString=newString(byteArray);以上......
  • java StringUtils字符串工具类
    /***通用常量信息**@authorruoyi*/publicclassConstants{/***UTF-8字符集*/publicstaticfinalStringUTF8="UTF-8";/......