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 关键字,不管常量池中有没有相同的对象,都会在堆中创建一个新对象。

  • 相关阅读:
    redis如何实现数据同步
    mysql调优学习笔记
    介绍一个好用的dao层与mybatis互跳的idea插件MyBatisCodeHelperPro
    springboot执行流程
    zookeeper
    (原创) cocos2dx使用Curl连接网络(客户端)
    (转) Eclipse连接MySQL数据库(傻瓜篇)
    (原创)cocos2dx使用jsoncpp的正确姿势
    Java web开发(17)SpirngMVC 详解
    PLC 程序和仿真
  • 原文地址:https://www.cnblogs.com/springmorning/p/10232635.html
Copyright © 2011-2022 走看看