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 }

java 与 c#的 中 字符串比较“==”与“equals”的差异的更多相关文章
- java中字符串比较==和equals
1 总体来说java中字符串的比较是==比较引用,equals 比较值的做法.(equals 对于其他引用类型比较的是地址,这是因为object的equals方法比较的是引用),但是不同的声明方法字符 ...
- JAVA中字符串比較equals()和equalsIgnoreCase()的差别
.使用equals( )方法比較两个字符串是否相等.它具有例如以下的一般形式: boolean equals(Object str) 这里str是一个用来与调用字符串(String)对象做比較的字符串 ...
- 三张图彻底了解Java中字符串的不变性
转载: 三张图彻底了解Java中字符串的不变性 定义一个字符串 String s = "abcd"; s中保存了string对象的引用.下面的箭头可以理解为"存储他的引用 ...
- java中字符串的非空判断
问题如下:在java 中 字符串为null 如何判断String str;if(str==null) ??str.equal("null") ?? 答:我觉得应该搞清楚字符串对象和 ...
- java中字符串String 转 int(转)
java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...
- Java中字符串相等与大小比较
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- 【转】Java中字符串中子串的查找共有四种方法(indexof())
原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下:1.int ...
- Java中字符串中子串的查找共有四种方法(indexof())
Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下:1.int indexOf(String str) :返回第一次出现的指定子字符串在此字 ...
- 浅谈JAVA中字符串常量的储存位置
在讲述这些之前我们需要一些预备知识: java中的内存被分成以下部分: 1.栈区:由编译器自动分配释放,具体方法执行结束后,系统自动释放JVM内存资源. 其作用有保存局部变量的值,包括:1.用来保存基 ...
随机推荐
- 数据结构与算法(2)----->字符串
1. 字符串的一些特点 1.1 广泛性 (1)字符串可以看作是字符类型的数组----->所以可能会涉及排序+查找; (2)很多问题都可以转化为字符串类型的方法去解决; 需要注意的是:用java ...
- 如何让Surface RT支持网站的flash
Go to the desktop version of IE10, hit the click ALT button on your keyboard, click on and then Comp ...
- 关于分支和主干Merge时要注意的事项
现在我们同时在主干和分支上进行开发, 当你需要将主干上某一工程代码 Merge到分支上(或者相反)时, 不要用check out 然后全部覆盖的方法, 这样不会关联源上的任何 history, 而且需 ...
- SimpliciTI使用
SimpliciTI组网过程介绍 1.SimpliciTI支持点对点和星形的网络拓扑结构. 下面介绍以AP为中心的SimpliciTI网路协议的星形拓扑结构通信过程 1)当ED节点上电之后就扫描信 ...
- java注解总结(1)
1.什么是注解 注解,主要提供一种机制,这种机制允许程序员在编写代码的同时可以直接编写元数据. 2.介绍 何为注解?--->元数据:描述数据自身的数据. 注解就是代码的元数据,他们包含了代码自身 ...
- [hdu3078]Network(LCA+排序)
题意:维护树上两点之间的最短路径,其一,将点a的值变为b,其二,求路径上第k大的值. 解题关键:LCA+sort 复杂度:$O(qn\log n + n\log n)$ 数据弱不怪我 //#pragm ...
- Windows下搭建Subversion 服务器
一.准备工作 1.获取 Subversion 服务器程序 到官方网站(http://subversion.tigris.org/)下载最新的服务器安装程序.目前最新的是1.5版本,具体下载地址在:ht ...
- array mysql_fetch_row(resource result)
array mysql_fetch_row(resource result) 函数返回从结果集result中取得的行生成的数组,若到了最后一行之后则返回false,每个结果的列存储在一个数组的单元中 ...
- POJ1251 Jungle Roads Kruskal+scanf输入小技巧
Jungle Roads The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign ai ...
- Apache为本地主机配置多个网站根目录详解
Author:KillerLegend Date:2014.5.27 From:http://blog.csdn.net/killerlegend/article/details/27195445 - ...