zoukankan      html  css  js  c++  java
  • String和new String的那点事

    String a= "test";

    此语句含义是:在常量池中创建test字符串对象,变量aa是对常量池中此对象的引用

    String aa = new String("test");

    此语句含义是:如果常量池中没有test字符串对象,会在常量池中创建,并且还会在堆中创建一个test对象,变量aa是对堆中此对象的引用

    String aaa= aa.intern() ;

    此语句的含义是:如果常量池中有test字符串对象(判断条件是equal方法返回true),就直接返回常量池中该对象引用给aaa;如果没有,就会在常量池中创建test,再返回常量池中该对象的引用给aaa。

    用以下代码运行结果验证一下:

    package org.springmorning.demo.javabase.string;
    
    /**
     * @author 春晨
     * @date 2019/1/7 9:05
     * Copyright ©2019 春晨 https://www.cnblogs.com/springmorning/p/10232635.html
     */
    public class StringAndNewStringDiff {
        public static void main(String[] args) {
            String a = "test";  //在常量池中创建test字符串对象,变量aa是对常量池中此对象的引用
            String aa = new String("test"); //由于前面语句已经在常量也中创建了test字符串对象,那么只会在堆中创建一个test对象,变量aa是对堆中此对象的引用
            String aaa = new String("test");//在堆中再创建一个test字符串对象,变量aaa是对堆中此对象的引用
    
            System.out.println("判断它们是否为同一对象(内存地址是否一致):");
            System.out.println("a和aa:" + (a == aa));   //false
            System.out.println("a和aaa:" + (a == aaa));   //false
            System.out.println("aa和aaa:" + (aa == aaa));  //false
    
            System.out.println("判断它们常量池中的对象是否为同一对象(内存地址是否一致):");
            System.out.println("a和aa:" + (a.intern() == aa.intern()));   //true
            System.out.println("a和aaa:" + (a.intern() == aaa.intern()));  //true
            System.out.println("aa和aaa:" + (aa.intern() == aaa.intern()));   //true
    
            System.out.println("判断它们引用的值字符串是否相等:");
            System.out.println("a和aa:" + a.equals(aa));   //true
            System.out.println("a和aaa:" + a.equals(aaa));  //true
            System.out.println("aa和aaa:" + aa.equals(aaa));   //true
    
        }
    }

     总结:

         new 关键字,不管常量池中有没有相同的对象,都会在堆中创建一个新对象。

  • 相关阅读:
    Educational Codeforces Round 20 D. Magazine Ad
    Educational Codeforces Round 20 C. Maximal GCD
    紫书第三章训练2 暴力集
    Educational Codeforces Round 20 B. Distances to Zero
    Educational Codeforces Round 20 A. Maximal Binary Matrix
    紫书第三章训练1 D
    紫书第一章训练1 D -Message Decoding
    HAZU校赛 Problem K: Deadline
    Mutual Training for Wannafly Union #8 D
    紫书第三章训练1 E
  • 原文地址:https://www.cnblogs.com/springmorning/p/10232635.html
Copyright © 2011-2022 走看看