java 与C# 中的String比较

C与 java中的String比较

--by comaple 2011-6-15

第一次比较:

Java实现

String str1="123";

String str2="123";

System.out.println(str1==str2);

System.out.println(str1.equals(str2));

输出为:

true

true

.Net实现

string str1 = "123";

            string str2 = "123";  

            Console.WriteLine(str1 == str2);

            Console.WriteLine(str1.Equals(str2));

            Console.ReadKey();

输出为:

分析:

由于Stringjava.net中都具有不变性,其实这两个字符串其实指向的是同一个地址空间。大家都知道Equals方法比较的是内容,由于地址相同当然值也相同,故不管是java还是.net返回的都是true。但==却不一样了,在javaString类没有对==运算符重载。那么==即相当于比较两个字符串的地址,而地址又恰恰是相等的故返回true

.net中的string类对==运算符做了重载。如果对string对象调用==运算符就相当于调用Equals()方法。故在.net中这两的字符串的内容是相等的,故返回true

那么既然==运算符在java.net中有不同的表现怎么证明,下面我们来看一下,第二次比较。

第二次比较

Java实现

 String str1="123";

//调用构造方法会创建新实例。

 String str2=new String("123");

 System.out.println(str1==str2);

 System.out.println(str1.equals(str2));

输出为:

false

true

.net实现

string str1 = "123";

//调用构造方法会创建新实例。

            string str2 = new string(new char[] { '1''2''3' }); 

            Console.WriteLine(str1 == str2);

            Console.WriteLine(str1.Equals(str2));

            Console.ReadKey();

分析

看到了吧,这里体现的很明显,由于String str2=new String("123");返回的是string的是一个新对象,故str2str1肯定不是同一个实例即指向了不同的地址空间。所以在调用java==比较的地址时当然返回的是false了。那么.net中有没有比较地址的方法呢,答案是肯定的。那就是ReferenceEqualsobject obj1,object obj2)。该方法返回的是两个对象的地址比较。那么让我们在看以下第三次比较吧。

第三次比较

修改.net实现

string str1 = "123"; 

            string str2 = new string(new char[] { '1''2''3' }); 

            Console.WriteLine(str1 == str2);

            Console.WriteLine(str1.Equals(str2)); 

            Console.WriteLine(ReferenceEquals(str1, str2));

            Console.ReadKey();

输出:

分析

看到了吧,这时候是TrueTrueFalsestr1str2已经不是一个对象了通过地址比较可以确认这一点。

补充说明

很多朋友问到.net中的stringString的区别是什么其实这两个类型没有根本区别。解释如下,其中string类型是C#语法的关键字,属于语法直接支持的引用类型。

String则是.netFramework类库的封装类型。归根结底还是string。但在用VS开发应用程序的时候到底用那个比较好呢?个人觉得其实这个问题不大,对性能的影响可以忽略不计。只是一但你决定用那个了那就整个项目都用一种写法,一保持统一。

不过非要说一个的话,我个人意见倾向于使用String,因为我们用的是VS开发工具,当然要用类库类型啦。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值