.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)); //true9             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)); //true7         System.out.println("s1.equals(s2) ? " + s1.equals(s2)); //true8         System.out.println("s1.equalsIgnoreCase(s) ? " + s1.equalsIgnoreCase(s)); //true9         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     }

转载于:https://www.cnblogs.com/bluewhale84/p/5726262.html

java 与 c#的 中 字符串比较“==”与“equals”的差异相关推荐

  1. 流程代码中js报错,在javaScript或者jQuery中字符串比较没有equals()方法

    问题: 流程走不下去. 原因: 在javaScript或者jQuery中字符串比较没有equals()方法,要比较两个字符串是否相等可以直接用==或者is()进行判断. //判断是否为未签约有风险等级 ...

  2. java 对比函数_java中字符串比较函数和操作函数,详细解析

    java编程语言中关于字符的内容也是极其丰富的,所以学习这方面的知识也十分重要的.今天就来为大家介绍一些与java字符串有关的内容,也就是java中字符串比较函数和操作函数,并为大家进行详细的解析,一 ...

  3. java split 冒号_Java中字符串split() 的使用方法,没你想的那么简单

    先看下面的方法,事先预测一下,经过split方法,按逗号进行分割为数组之后,生成的数组的长度是多少,目测很多人都觉得是8,但是结果却出乎意料.是5而不是8. private static void t ...

  4. java equals equalsignorecase 性能_JAVA中字符串比較equals()和equalsIgnoreCase()的差别

    1.使用equals( )方法比較两个字符串是否相等.它具有例如以下的一般形式: boolean equals(Object str) 这里str是一个用来与调用字符串(String)对象做比較的字符 ...

  5. java sbyte_JAVA与c#中byte取值范围的差异

    C#中分有符号类型的sbyte和无符号类型的byte Console.WriteLine("byte.min:{0},byte.max:{1},{2}byte", byte.Min ...

  6. java string的某个字符_JAVA如何提取String中字符串的某个字符 具体内容

    今天小编和大家分享JAVA如何提取String中字符串的某个字符,希望对大家有所帮助. 工具/材料 PC 操作方法 01 java中提取特定字符前的字符串: String str = "房估 ...

  7. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

  8. java string 连续字符_Java中字符串中连续相同字符去重方法

    导读 正文 最近参加了一个面试,问到了如何在一个字符串中连续相同字符去重,想了想用正则表达式应该可以轻松实现.可是由于长时间没有编码了,而且由于原先的工作用到的比较少.具体的自己就不会写正则表达式用到 ...

  9. java 字符串用法_java中字符串的用法

    1.String中的每个字符都是一个16位的Unicode字符,用Unicode很容易表达丰富的国际化字符集,比如很好的中文支持.甚至Java的标识符都可以用汉字,但是没人会用吧(只在一本清华的< ...

最新文章

  1. 【kudu pk parquet】TPC-H Query2对比解析
  2. android 双击home退出程序,Android项目实战(五十五):部分机型点击home再点图标进入程序不保留再之前界面的问题...
  3. deepin 15.11镜像下载地址
  4. REVERSE-PRACTICE-JarvisOJ-2
  5. C php反序列化,php反序列化漏洞 - anansec的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用
  7. Oracle学习笔记之五sp1,PL/SQL之BULK COLLECT
  8. PADS 9.5封装向导 多一个管脚
  9. 我学Delphi心得及笔记----内存(第七讲)
  10. Ubuntu 分卷压缩和解压
  11. 查看tomcat目前用的jdk版本
  12. python httpserver 支持ipv6
  13. 驱动一款淘宝购买的130万像素的USB双目摄像头-记录
  14. input标签详解,用户注册表单
  15. bsl计算机术语,一种BSL的确定方法、BIER-TE控制器和计算机存储介质与流程
  16. EtherCAT从站调试测试
  17. vscode配置本地使用赛码网的输入输出格式编写代码
  18. ERP现状及未来发展趋势分析?
  19. 模拟信号标准三隔离信号分配器0-10V转4-20mA导轨式模块
  20. python温度转换_一步一步教会你,详解用Python实现一个简易的温度换算GUI小工具...

热门文章

  1. PHP+jquery 树状菜单
  2. ubuntu使用root权限登录的设置方法
  3. MVC中不能使用原生态的#include ,可替代的解决方案
  4. U盘专杀工具,U盘防御软件,U盘病毒防火墙--UDiskSyS
  5. matplotlib plt.subplot
  6. 北航计算机组成原理ppt,北航计算机组成原理课件.ppt
  7. jmeter使用_jmeter工具的使用
  8. Matlab控制精度
  9. 仅使用HTML和CSS实现的标签云效果
  10. 某个元素的距离页面的左边距_在机检测圆心距