C#和java中String的异同

20 篇文章 0 订阅

JavaC#是极其的相似,两种语言都各有优劣,这里对JavaC#string的异同进行一下介绍。

相同点:

1/ javaC#string都被看做对象来处理,都有处理字符串的丰富的方法。

2/ javaC#string都是不可变类。

亦即,当两个string变量s1,s2指向同一个字符串对象ss时,如果通过s1改变ss的值,将不会对s2指向的string实例产生影响,而是开辟另一块内存空间存储新的string,这也是和其他普通类最大的不同。对于下面的代码,javaC#都会输出相同的结果,先输出true后输出false

                       string s1 = "123";

            string s2 = s1;

 

            if (s1 == s2)

            {

                //输出true

            }

            else

            {

                //输出false

            }

            s2 = "456";

            if (s1 == s2)

            {

                //输出true

            }

            else

            {

                //输出false

        }

不同点:

1/ C#中所有string对象都放在堆中,而java根据定义的形式,既可以放到堆栈中(有一个string池)也可以放到堆中。

String s="";

String s=new String();

对于上面的两种定义方式,C#都会将相应的string对象放到堆中,而在java中,用第一种方式定义的字符串会被放到堆栈中的string池中,第二种方式定义的字符串会放到对中,相应的第一种方式中的s存储的是堆栈中字符串的地址,第二种方式中的s存储的是堆中string对象的起始地址。

2/ javaC#中,比较字符串时“==”和“equals()方法”的异同。

String s1="123";

String s2=new String(xxx);//javaxxx"123"C#xxx为存储"123"的字符数组

上面的s1s2代表的都是字符串"123",分别在java中和C#中执行下列操作,比较异同。

2.1 代码如下:

if (s1 == s2)

{

    //输出true

}

else

{

    //输出false

}

执行上面的代码,在C#中输出地会是true,而在java中输出地会是false,原因在于在C#中“s1==s2”比较的是s1s2指向字符串的实际内容,而在java中“s1==s2”比较的是s1s2这两个变量指向的string的地址,一个在堆栈中,一个在堆中,输出地肯定是false

2.2 代码如下

if (s1.equals(s2))

{

    //输出true

}

else

{

    //输出false

}

这次在C#java中输出地都是true,现在可以总结出:在C#s1 == s2(s1.equals(s2)表示的意义相同,都是比较字符串的实际内容;而在java中前者比较的是地址,后者比较的才是字符串实际的内容。

这里我们再介绍点儿java字符串的其它特性。

2.3 代码如下

String s1="123";

String s2="123";

String s3=new String("123");

String s4=new String("123");

if (s1 == s2)

{

    //输出true

}

else

{

    //输出false

}

if (s3 == s4)

{

    //输出true

}

else

{

    //输出false

}

运行上面的代码你会发现,会先输出true,再输出false。后者输出false容易理解,因为s3s4在堆的不同区域中,而前者为什么会输出true呢?这是因为,在java中当采用string s="test"的形式定义字符串时,会先检查string池中是否已经有test,如果有就将s指向已经有的这个test所在的内存区域中,本例中s1s2指向的是同一个“123”,所以会输出为true

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值