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)); //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”的差异相关推荐
- 流程代码中js报错,在javaScript或者jQuery中字符串比较没有equals()方法
问题: 流程走不下去. 原因: 在javaScript或者jQuery中字符串比较没有equals()方法,要比较两个字符串是否相等可以直接用==或者is()进行判断. //判断是否为未签约有风险等级 ...
- java 对比函数_java中字符串比较函数和操作函数,详细解析
java编程语言中关于字符的内容也是极其丰富的,所以学习这方面的知识也十分重要的.今天就来为大家介绍一些与java字符串有关的内容,也就是java中字符串比较函数和操作函数,并为大家进行详细的解析,一 ...
- java split 冒号_Java中字符串split() 的使用方法,没你想的那么简单
先看下面的方法,事先预测一下,经过split方法,按逗号进行分割为数组之后,生成的数组的长度是多少,目测很多人都觉得是8,但是结果却出乎意料.是5而不是8. private static void t ...
- java equals equalsignorecase 性能_JAVA中字符串比較equals()和equalsIgnoreCase()的差别
1.使用equals( )方法比較两个字符串是否相等.它具有例如以下的一般形式: boolean equals(Object str) 这里str是一个用来与调用字符串(String)对象做比較的字符 ...
- java sbyte_JAVA与c#中byte取值范围的差异
C#中分有符号类型的sbyte和无符号类型的byte Console.WriteLine("byte.min:{0},byte.max:{1},{2}byte", byte.Min ...
- java string的某个字符_JAVA如何提取String中字符串的某个字符 具体内容
今天小编和大家分享JAVA如何提取String中字符串的某个字符,希望对大家有所帮助. 工具/材料 PC 操作方法 01 java中提取特定字符前的字符串: String str = "房估 ...
- java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...
1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...
- java string 连续字符_Java中字符串中连续相同字符去重方法
导读 正文 最近参加了一个面试,问到了如何在一个字符串中连续相同字符去重,想了想用正则表达式应该可以轻松实现.可是由于长时间没有编码了,而且由于原先的工作用到的比较少.具体的自己就不会写正则表达式用到 ...
- java 字符串用法_java中字符串的用法
1.String中的每个字符都是一个16位的Unicode字符,用Unicode很容易表达丰富的国际化字符集,比如很好的中文支持.甚至Java的标识符都可以用汉字,但是没人会用吧(只在一本清华的< ...
最新文章
- 【kudu pk parquet】TPC-H Query2对比解析
- android 双击home退出程序,Android项目实战(五十五):部分机型点击home再点图标进入程序不保留再之前界面的问题...
- deepin 15.11镜像下载地址
- REVERSE-PRACTICE-JarvisOJ-2
- C php反序列化,php反序列化漏洞 - anansec的个人空间 - OSCHINA - 中文开源技术交流社区...
- ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用
- Oracle学习笔记之五sp1,PL/SQL之BULK COLLECT
- PADS 9.5封装向导 多一个管脚
- 我学Delphi心得及笔记----内存(第七讲)
- Ubuntu 分卷压缩和解压
- 查看tomcat目前用的jdk版本
- python httpserver 支持ipv6
- 驱动一款淘宝购买的130万像素的USB双目摄像头-记录
- input标签详解,用户注册表单
- bsl计算机术语,一种BSL的确定方法、BIER-TE控制器和计算机存储介质与流程
- EtherCAT从站调试测试
- vscode配置本地使用赛码网的输入输出格式编写代码
- ERP现状及未来发展趋势分析?
- 模拟信号标准三隔离信号分配器0-10V转4-20mA导轨式模块
- python温度转换_一步一步教会你,详解用Python实现一个简易的温度换算GUI小工具...