zoukankan      html  css  js  c++  java
  • String小探

    String对于我们来说,是熟悉的不能再熟悉了,但越是熟悉,越容易忽略。

    对此,就针对这个特意去探究了下几种场景,在此记录下

    场景一

    1         String a = "hello world";
    2         String d = "hello";
    3         String b = "hello";
    4         String c = b + " world";
    5         System.out.println(b.equals(d));
    6         System.out.println(b == d);
    7         System.out.println(a.equals(c));
    8         System.out.println(a == c);

    这时候大家可以分析一波,5,7应该是true,至于6和8则需要犹豫下了。

    直接运行,发现答案对应从5-8是true  true  true  false

    细想下就知道了,String是有一个常量池的,所以6是true,而8是两个不同的对象地址了,相加是指向不同位置了,接下来我们在验证下一个场景

    场景二

    1         String str1 = "what a nice day";
    2         String str2 = new String("what a nice day");
    3         System.out.println(str1.equals(str2));
    4         System.out.println(str1 == str2);

    答案是true和false,同样的 ,你因为你new了一个对象,所以第二种未false

    场景三

    1         String str11 = "what";
    2         String str22 = str11.concat(" a nice day");
    3         System.out.println("what a nice day".equals(str22));
    4         System.out.println("what a nice day" == str22);
    5         System.out.println("what a nice day" == str22.intern());

    这次3,4,5对应的是true,false,true

    至于5为什么为true,看下源码注释就知道了

    当他们在同一个常量池时,会返回equals相同的值,所以结果和equals一样

    以前我们所忽视的,现在看来还是有点意思的,需要多试验探讨下。

  • 相关阅读:
    FusionCharts ScrollColumn2D图
    Java Web项目部署Tomcat运行出错
    Eclipse部署Java Web项目到Tomcat出错
    JavaScript过滤特殊字符
    pl/sql 在一个程序块里打印日志输出到表格
    Java中过滤出字母、数字和中文的正则表达式
    pl/sql 程序块里打印问题
    C++函数的Boost内存池性能介绍
    boost内存池的使用介绍
    内存管理 Boost::singleton_pool
  • 原文地址:https://www.cnblogs.com/xzshare/p/12255005.html
Copyright © 2011-2022 走看看