Java和C#中String直接赋值与使用new创建(==与equals进行比较)的区别
2014-11-03 11:23
911 查看
在Java中,字符串可以直接赋值或者使用new来新建,直接赋值的话是编译阶段(.class文件)中就将该字符串值放到常量池中,以后如果有其他变量直接赋予同样的值的话就不再分配内存空间,而是直接给它个引用地址;而使用new来创建的话是在程序运行时才分配的空间,是一个新的引用地址,可以通过inter()方法将字符串加入的常量池中,如果在常量池中已经存在该字符串,则返回其引用。在String类中,==是比较两个字符串的引用地址是否相同,equals比较的是两者的值是否相同(在其他的引用类中==和equals也是同样意思)。看个例子加深理解:
String s1="sa";
String s2="sa";//编译时让s1与s2指向同一个引用地址
String s3=new String("sa");//程序运行时给s3一个新的引用地址
String s4=new String("sa").intern();//程序运行时给s4返回s1和s2所指向的引用地址
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
System.out.println(s1==s3);
System.out.println(s1.equals(s3));
System.out.println(s1==s4);
System.out.println(s1.equals(s4));
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
输出结果:
true
true
false
true
true
true
false
true
对C#的内存分配机制不是很了解,关于String类中==和equals的区别通过程序来验证,可以看出==和equals都是比较值是否相等(在其他引用类中==默认比较引用地址,Equals默认比较值):
string s1 = "sb";
string s2 = "sb";
char[] t={'s','b'};
String s3 = new String(t);
Console.WriteLine(s1 == s2);
Console.WriteLine(s1.Equals(s2));
Console.WriteLine(s1 == s3);
Console.WriteLine(s1.Equals(s3));
输出结果:
true
true
true
true
总结如有错误之处,还请指出。
String s1="sa";
String s2="sa";//编译时让s1与s2指向同一个引用地址
String s3=new String("sa");//程序运行时给s3一个新的引用地址
String s4=new String("sa").intern();//程序运行时给s4返回s1和s2所指向的引用地址
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
System.out.println(s1==s3);
System.out.println(s1.equals(s3));
System.out.println(s1==s4);
System.out.println(s1.equals(s4));
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
输出结果:
true
true
false
true
true
true
false
true
对C#的内存分配机制不是很了解,关于String类中==和equals的区别通过程序来验证,可以看出==和equals都是比较值是否相等(在其他引用类中==默认比较引用地址,Equals默认比较值):
string s1 = "sb";
string s2 = "sb";
char[] t={'s','b'};
String s3 = new String(t);
Console.WriteLine(s1 == s2);
Console.WriteLine(s1.Equals(s2));
Console.WriteLine(s1 == s3);
Console.WriteLine(s1.Equals(s3));
输出结果:
true
true
true
true
总结如有错误之处,还请指出。
相关文章推荐
- Java和C#中String直接赋值与使用new创建(==与equals进行比较)的区别
- Java和C#中String直接赋值与使用new创建(==与equals进行比较)的区别
- Java中创建String、Integer、Charater直接赋值与new一个对象的区别
- Java中String直接赋值和使用new的区别
- String直接赋值和使用new的区别
- Java中用字符串常量赋值和使用new构造String对象的区别
- 第2章 Java编程基础——FAQ2.22 创建String对象时, 使用String s=new String (“abc”)和String s=“abc”语句有什么区别?
- JAVA中String直接赋值与new出来的对象赋值的区别
- java:String使用equals和==比较的区别
- java:String使用equals和==比较的区别
- java中String通过new和直接赋值的区别
- Java中String使用equals和==比较的区别
- Java:String使用equals和==比较的区别(转)
- Java中String类通过new创建和直接赋值字符串的区别
- java中String 的==和equals;String直接赋值和使用new String()
- java中创建String类型对象的两种方式以及在使用equals()和“==”两种方法时的区别
- Java中String类通过new创建和直接赋值字符串的区别
- java:String使用equals和==比较的区别
- java:String使用equals和==比较的区别
- java基础知识(三)-- String使用equals和==比较的区别