• String巩固


    About String in Java

    				如今做了一个重大决定,不定期温习The Basement Of Java
    
    1. String对象的认知简述
      首先 String不属于 8种基本数据类型, String是一个对象。 因为对象的默认值是null。但它又是一种特殊的对象,有其对象没有的一些特性。
      new String()和new String("")都是声明一个空字符串,而不是null。
    2. 常量池(constant pool)
      常量池指的是在编译期被确定,并保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
    3. 字符串池
      在JVM中存在着一个字符串池,其中保存着许多String对象,并且可以被共享使用,因此它提高了效率。String类是final的,它的值一经创建便不可改变,因此我们不用担心String由于共享而带来的程序混乱。字符串池由String类维护,我们可以调用intern()方法来访问字符串池。
    • 例1
      public class Test {
      public static void main(String args[]) {
      String str0 = "abc";
      String str1 = "abc";
      String str2 = "a" + "bc";
      System.out.println(str0 == str1);
      System.out.println(str0 == str2);
      }
      }
      运行结果:
      true
      true
      解释:Java会确保一个字符串常量只有拷贝, 因为例子中的 str0和 str1中的” 中的” abc ”都是字符串常量, 它们在编译期就被确定了,所以 str0== str1为 true ;而” a”和” ” 和bc ”也都是字符,当一个字符由多个字符串连接而成时它自己肯定也是字符串常量,所以 s2 也同样在编译期就被解析为一个字符串常量。所以得出
      str0 = str1 = str2
    • 例2
      public class Test {
      public static void main(String args[]) {
      String str0 = "kvill";
      String str1 = new String("kvill");
      String str2 = "k" + new String("ill");
      System.out.println(str0 == str1);
      System.out.println(str0 == str2);
      System.out.println(str1 == str2);
      }
      }
      运行结果:
      false
      false
      false
      例2中str0还是常量池中”kvill”的应用,str1因为无法在编译期确定,所以是运行时创建的新对象”kvill”的引用,str2因为有后半部分new String(“ill”)所以也无法在编译期确定,所以也是一个新创建对象”kvill”的应用。
      明白了这些也就知道为何得出此结果了
  • 相关阅读:
    模板
    待补 http://acm.hdu.edu.cn/showproblem.php?pid=6602
    待补 http://acm.hdu.edu.cn/showproblem.php?pid=6583
    2019 Multi-University Training Contest 1
    洛谷
    2019 Multi-University Training Contest 2
    模板
    2019牛客暑期多校训练营(第三场)
    2019牛客暑期多校训练营(第三场)
    模板
  • 原文地址:https://www.cnblogs.com/wzk1992/p/9000297.html
Copyright © 2020-2023  润新知