zoukankan      html  css  js  c++  java
  • 使用==比较String类型

    String类型的比较

    public class StringDemo {
    
    public static void main(String[] args) {
        
        String s1 = "abc";
        String s2 = "abc";
        String s3 = new String("abc");
    
        System.out.println(s1 == s2);//true
        System.out.println(s1 == s3);//false
        
      }
    
    }

    按照==的语法来看, 首先s1s2s3是三个不同的对象,常理来说,输出都会是false。然而程序的运行结果确实truefalse。第二个输出false可以理解,第一个输出true就又让人费解了。我们知道一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,而堆内存中则存放new 出来的对象和数组。然而除此之外还有一块区域叫做常量池。像我们通常想String s1 = "abc"; 这样申明的字符串对象,其值就是存储在常量池中。当我们创建String s1 = "abc"这样一个对象之后,"abc"就存储到了常量池(也可叫做字符串池)中,当我们创建引用String s2 = "abc" 的时候,Java底层会优先在常量池中查找是否存在"abc",如果存在则让s2指向这个值,不会重新创建,如果常量池中没有则创建并添加的池中。这就是为什么答案是true false的原因。

     

  • 相关阅读:
    Ajax笔记(三)
    Ajax笔记(二)
    org.apache.commons.lang.StringUtils中常用的方法
    数位dp poj1850
    二分图 最小点覆盖 poj 3041
    poj 1789 prime
    c++三种进制格式
    c++面向行的输入getline()和get()
    最小生成树 prime算法 UVALive
    最短路 poj1125
  • 原文地址:https://www.cnblogs.com/bmbi/p/5065182.html
Copyright © 2011-2022 走看看