zoukankan      html  css  js  c++  java
  • String解析

    拼接

      String s1 = "a"+"b"+"c";
      String s2 = "abc";
      System.
    out.println(s1 == s2); //true,编译器在编译时将s1直接优化为“abc",存储在字符串常量池中
      
      //如果拼接符号前后出现了变量,则相当于在堆中new String();  
      String s3 = ”hello"+s2;//在堆内存
      String s4 = "helloabc";//在字符串常量池
      
    System.out.println(s3 == s4);//false


      //当调用 intern 方法时,如果常量池中已经该字符串,则返回池中的字符串;否则将此字符串添加到常量池中,并返回字符串的引用。s->堆->常量池
      String s = new String("abc").intern();
      System.out.println(s == s2)//false,s指向堆内存,s2指向常量池
      
      String s5 = "hello";
      String s6 = s5+s2;
      System.out.println(s5 == s6);//true

      String s2 = "abc";
      String s3 = s2 + "a";
      String s4 = "a";
      String s5 = "abc" + s4;
      //false,在堆内存有两个"abca"
      System.out.println(s5 == s3);

      //生成str会创建几个对象?阅读字节码文件可以看出
      //new String("ab");执行完常量池会有一个"ab",下列代码常量池没有”ab“
      String str = new String("a") + new String("b");
      /*
        对象1:new StringBuilder();
        对象2:new String(”a“);
        对象3:字符串常量池中的”a“
        对象4:new String(”b“)
        对象5:字符串常量池中的”b“
        对象6:new String("ab"),stringBuilder 会调用一个toString()做new String("ab")操作,这时字符串常量池并没有”ab“
       */
      str.intern();//str->堆<-常量池
      String s = "ab";s->常量池->堆
      System.out.println(str == s)://true,这时s指向常量池,而常量池记录的是"ab"堆内存的地址


     String str="abc";和String str = new String("abc");的区别 - 掘金 (juejin.cn)

  • 相关阅读:
    LoadRunner如何监控Linux下的系统资源
    shareeverything and sharenothing原理区别
    LoadRunner下如何监控Windows系统资源
    简明 Vim 练级攻略
    自由地使用那10000个Web协议的License进行压力测试
    自己做的西直门桥
    Visual Studio问题解答(不断更新)
    记2012微软编程之美全国挑战赛
    matlab也能创作歌曲
    拈游戏
  • 原文地址:https://www.cnblogs.com/isalo/p/15504662.html
Copyright © 2011-2022 走看看