C#和java中String的异同

2022/5/29 1:21:48

本文主要是介绍C#和java中String的异同,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

相同点:

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

2/ 在java和C#中string都是不可变类。

亦即,当两个string变量s1,s2指向同一个字符串对象ss时,如果通过s1改变ss的值,将不会对s2指向的string实例产生影响,而是开辟另一块内存空间存储新的string,这也是和其他普通类最大的不同。对于下面的代码,java和C#都会输出相同的结果,先输出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/ java和C#中,比较字符串时“==”和“equals()方法”的异同。

String s1="123";

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

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

2.1 代码如下:

if (s1 == s2)

{

    //输出true;

}

else

{

    //输出false

}

执行上面的代码,在C#中输出地会是true,而在java中输出地会是false,原因在于在C#中“s1s2”比较的是s1和s2指向字符串的实际内容,而在java中“s1s2”比较的是s1和s2这两个变量指向的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容易理解,因为s3和s4在堆的不同区域中,而前者为什么会输出true呢?这是因为,在java中当采用string s="test"的形式定义字符串时,会先检查string池中是否已经有test,如果有就将s指向已经有的这个test所在的内存区域中,本例中s1和s2指向的是同一个“123”,所以会输出为true。

本文转自 https://blog.csdn.net/lubiaopan/article/details/5784841,如有侵权,请联系删除。



这篇关于C#和java中String的异同的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程