zoukankan      html  css  js  c++  java
  • String池

        public static void main(String[] args) throws IOException {
            
            String s1 = "a";  
            String s2 = "b";  
            String s3 = "ab";  
              
            String s4 = "ab";  
            System.out.println("s3==s4 -> "+ (s3==s4));  
      
            String s5 = "a"+"b";  
            System.out.println("s3==s5 -> "+ (s3==s5));  
              
            String s6 = s1+s2;  
            System.out.println("s3==s6 -> "+ (s3==s6));  
              
            String s7 = new String("ab");  
            System.out.println("s3==s7 -> "+ (s3==s7));  
              
            final String s8 = "a" ;   
            final String s9 = "b" ;  
            String s10 = s8 + s9;  
            System.out.println("s3==s10 -> "+ (s3==s10)); 
    
        }

    输出的结果为:

        s3==s4 -> true
        s3==s5 -> true
        s3==s6 -> false
        s3==s7 -> false
        s3==s10 -> true


    java中的字符串 :String类是不可变的(final),对String类的任何改变,都是返回一个新的String类对象。String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。

    把String类的引用传递给一个方法,该方法对String的任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似。

    String池 :String是不可改变的,为了提高效率Java引用了字符串池的概念,例如new String("abc");首先会在String池中创建一个对象“abc”,因为有NEW的存在所以会分配地址空间copy String池的内容。当出现的String对象在String池中不存在时即在String池中创建该对象。

    s3、s4  ->  根据String的概念他们都指向了同一个缓冲池内的地址,所以结果为true。

    s3、s5  ->  因为相加的两个为常量,所以编译器会把s5="a"+"b"优化为s5="ab",所以结果也为true。

    s3、s6  ->  因为是两个变量的相加所以编译器无法优化,s1+s2即等同于(new StringBuilder(String.valueOf(s1))).append(s2).toString(); 在运行时,会有新的String地址空间的分配,而不是指向缓冲池中的“ab”。所以结果false。

    s3、s7  ->  根据缓冲池的定义在new的时候实际会新分配地址空间,s7指向的是新分配的地址空间所以与缓冲池地址不同,所以为false。

    s3、s10  ->  类似于s3与s5,因为是final类型编译器进行了优化所以相同。

  • 相关阅读:
    EasyNetQ使用(三)【Publish与Subcribe】
    EasyNetQ使用(二)【连接RabbitMQ,SSL连接,Logging】
    EasyNetQ使用(一)【介绍】
    .net core使用EasyNetQ做EventBus
    .NET Core微服务之开源项目CAP的初步使用
    CAP 介绍及使用【视频】
    .NET Core 事件总线,分布式事务解决方案:CAP
    微服务中的异步消息通讯
    使用 Metrics.net + influxdb + grafana 搭建项目自动化监控和预警方案
    编写高效的jQuery代码
  • 原文地址:https://www.cnblogs.com/xuekyo/p/3002461.html
Copyright © 2011-2022 走看看