zoukankan      html  css  js  c++  java
  • java 与 c#的 中 字符串比较“==”与“equals”的差异

    .net中,其字符串特有的驻留机制,保证了在同一进程中,相同字符序列的字符串,只有一个实例,这样能避免相同内容的字符串重复实例化,以减少性能开销。

    先来回顾一下c#中的代码:

    public static void testString()
    {
    String s = "Abc";
    String s1 = "abc";
    String s2 = "abc";


    Console.WriteLine("s1==s2 ? " + (s1 == s2)); //true
    Console.WriteLine("s1.Equals(s2) ? " + s1.Equals(s2)); //true
    Console.WriteLine("String.Compare(s1,s,true) ? " + String.Compare(s1, s, true)); //0
    Console.WriteLine("------------------------");


    char[] chr = { 'a', 'b', 'c' };
    String s3 = new String(chr);
    Console.WriteLine("s1==s3 ? " + (s1 == s3)); //true
    Console.WriteLine("s1.equals(s3) ? " + s1.Equals(s3)); //true
    Console.WriteLine("String.Compare(s3, s, true) ? " + String.Compare(s3, s, true)); //0
    Console.WriteLine("------------------------");

    String t = "bc";
    String s4 = "a" + t;
    Console.WriteLine("s1==s4 ? " + (s1 == s4)); //true
    Console.WriteLine("s1.equals(s4) ? " + s1.Equals(s4)); //true
    Console.WriteLine("String.Compare(s4, s, true) ? " + String.Compare(s4, s, true)); //0
    Console.WriteLine("------------------------");

    String s5 = "a" + "bc";
    Console.WriteLine("s1==s5 ? " + (s1 == s5)); //true
    Console.WriteLine("s1.equals(s5) ? " + s1.Equals(s5)); //true
    Console.WriteLine("String.Compare(s5, s, true) ? " + String.Compare(s5, s, true)); //0


    Console.Read();


    }

    复制代码
     1         public static void testString()
     2         {
     3             String s = "Abc";
     4             String s1 = "abc";
     5             String s2 = "abc";
     6 
     7 
     8             Console.WriteLine("s1==s2 ? " + (s1 == s2)); //true
     9             Console.WriteLine("s1.Equals(s2) ? " + s1.Equals(s2)); //true
    10             Console.WriteLine("String.Compare(s1,s,true) ? " + String.Compare(s1, s, true)); //0
    11             Console.WriteLine("------------------------");
    12 
    13 
    14             char[] chr = { 'a', 'b', 'c' };
    15             String s3 = new String(chr);
    16             Console.WriteLine("s1==s3 ? " + (s1 == s3)); //true
    17             Console.WriteLine("s1.equals(s3) ? " + s1.Equals(s3)); //true
    18             Console.WriteLine("String.Compare(s3, s, true) ? " + String.Compare(s3, s, true)); //0
    19             Console.WriteLine("------------------------");
    20 
    21             String t = "bc";
    22             String s4 = "a" + t;
    23             Console.WriteLine("s1==s4 ? " + (s1 == s4)); //true
    24             Console.WriteLine("s1.equals(s4) ? " + s1.Equals(s4)); //true
    25             Console.WriteLine("String.Compare(s4, s, true) ? " + String.Compare(s4, s, true)); //0
    26             Console.WriteLine("------------------------");
    27 
    28             String s5 = "a" + "bc";
    29             Console.WriteLine("s1==s5 ? " + (s1 == s5)); //true
    30             Console.WriteLine("s1.equals(s5) ? " + s1.Equals(s5)); //true
    31             Console.WriteLine("String.Compare(s5, s, true) ? " + String.Compare(s5, s, true)); //0
    32 
    33 
    34             Console.Read();
    35 
    36 
    37         }
    复制代码

    从运行结果可以看出,无论你怎么折腾,只要二个字符串的内容完全相同,引用始终只有一个。

    java中其实也有类似的机制,称为“字符串常量池”,但是java中却允许 用new String(String str)的方式创建多个相同内容的实例。为了能区别这二种情况,java中的==与equals用来判断字符串是否相等时,赋予了不同的含义。

    ==用于判定二个字符串是否引用相同,而equals用于判断二个字符串是否内容相同

    public static void testString(){
    String s = "Abc";
    String s1 = "abc";
    String s2 = "abc";

    System.out.println("s1==s2 ? " + (s1==s2)); //true
    System.out.println("s1.equals(s2) ? " + s1.equals(s2)); //true
    System.out.println("s1.equalsIgnoreCase(s) ? " + s1.equalsIgnoreCase(s)); //true
    System.out.println("------------------------");

    String s3 = new String("abc");
    System.out.println("s1==s3 ? " + (s1==s3)); //false
    System.out.println("s1.equals(s3) ? " + s1.equals(s3)); //true
    System.out.println("s3.equalsIgnoreCase(s) ? " + s3.equalsIgnoreCase(s)); //true
    System.out.println("------------------------");

    char[] chr ={'a','b','c'};
    String s4 = new String(chr);
    System.out.println("s1==s4 ? " + (s1==s4)); //false
    System.out.println("s1.equals(s4) ? " + s1.equals(s4)); //true
    System.out.println("s4.equalsIgnoreCase(s) ? " + s4.equalsIgnoreCase(s)); //true
    System.out.println("------------------------");

    String t ="bc";
    String s5 = "a" + t;
    System.out.println("s1==s5 ? " + (s1==s5)); //false
    System.out.println("s1.equals(s5) ? " + s1.equals(s5)); //true
    System.out.println("s5.equalsIgnoreCase(s) ? " + s5.equalsIgnoreCase(s)); //true
    System.out.println("------------------------");

    String s6 = "a" + "bc";
    System.out.println("s1==s6 ? " + (s1==s6)); //true
    System.out.println("s1.equals(s6) ? " + s1.equals(s6)); //true
    System.out.println("s6.equalsIgnoreCase(s) ? " + s6.equalsIgnoreCase(s)); //true


    }

    复制代码
     1 public static void testString(){
     2         String s = "Abc";
     3         String s1 = "abc";
     4         String s2 = "abc";
     5         
     6         System.out.println("s1==s2 ? " + (s1==s2)); //true
     7         System.out.println("s1.equals(s2) ? " + s1.equals(s2)); //true
     8         System.out.println("s1.equalsIgnoreCase(s) ? " + s1.equalsIgnoreCase(s)); //true
     9         System.out.println("------------------------");
    10         
    11         String s3 = new String("abc"); 
    12         System.out.println("s1==s3 ? " + (s1==s3)); //false
    13         System.out.println("s1.equals(s3) ? " + s1.equals(s3)); //true    
    14         System.out.println("s3.equalsIgnoreCase(s) ? " + s3.equalsIgnoreCase(s)); //true
    15         System.out.println("------------------------");
    16         
    17         char[] chr ={'a','b','c'};
    18         String s4 = new String(chr);
    19         System.out.println("s1==s4 ? " + (s1==s4)); //false
    20         System.out.println("s1.equals(s4) ? " + s1.equals(s4)); //true
    21         System.out.println("s4.equalsIgnoreCase(s) ? " + s4.equalsIgnoreCase(s)); //true
    22         System.out.println("------------------------");
    23         
    24         String t ="bc";
    25         String s5 = "a" + t;
    26         System.out.println("s1==s5 ? " + (s1==s5)); //false
    27         System.out.println("s1.equals(s5) ? " + s1.equals(s5)); //true
    28         System.out.println("s5.equalsIgnoreCase(s) ? " + s5.equalsIgnoreCase(s)); //true
    29         System.out.println("------------------------");
    30         
    31         String s6 = "a" + "bc";
    32         System.out.println("s1==s6 ? " + (s1==s6)); //true
    33         System.out.println("s1.equals(s6) ? " + s1.equals(s6)); //true
    34         System.out.println("s6.equalsIgnoreCase(s) ? " + s6.equalsIgnoreCase(s)); //true
    35         
    36         
    37     }
    复制代码
  • 相关阅读:
    WebDriverException:Message:'geckodriver'executable needs to be in Path
    如何使用NSDL玩转微信跳一跳
    python多线程下载网页图片并保存至特定目录
    sql之将一个表中的数据注入另一个表中
    sql之分区域分段统计
    sql之分段统计
    ajax二次封装之异步加载
    vue组件之echarts报表
    url查询参数解析
    template.js 数据渲染引擎
  • 原文地址:https://www.cnblogs.com/bluewhale84/p/5726262.html
Copyright © 2011-2022 走看看