zoukankan      html  css  js  c++  java
  • 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”的应用。
      明白了这些也就知道为何得出此结果了
  • 相关阅读:
    HttpServletResponse
    非易失性FRAM中的预充电操作
    Everspin MRAM优化系统能耗
    工业和消费者HMI系统中的扩展内存
    STT结构涡轮增压MRAM
    将FRAM存储器芯片集成到汽车EDR设计中
    ros编译时报Invoking "make -j4 -l4" failed
    python安装第三方库xlrd失败、更新pip失败
    python的pip命令安装request库失败、在pycharm里File>setting...>Python Interpreter里右上角点击加号搜索request点击安装也失败
    selenium之unitest库
  • 原文地址:https://www.cnblogs.com/wzk1992/p/9000297.html
Copyright © 2011-2022 走看看