码迷,mamicode.com
首页 > 编程语言 > 详细

Java和C#中String直接赋值与使用new创建(==与equals进行比较)的区别

时间:2014-11-03 12:43:36      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:ar   使用   java   sp   文件   div   on   bs   line   

在Java中,字符串可以直接赋值或者使用new来新建,直接赋值的话是编译阶段(.class文件)中就将该字符串值放到常量池中,以后如果有其他变量直接赋予同样的值的话就不再分配内存空间,而是直接给它个引用地址;而使用new来创建的话是在程序运行时才分配的空间,是一个新的引用地址,可以通过inter()方法将字符串加入的常量池中,如果在常量池中已经存在该字符串,则返回其引用。在String类中,==是比较两个字符串的引用地址是否相同,equals比较的是两者的值是否相同(在其他的引用类中==和equals也是同样意思)。看个例子加深理解:

 

  1. String s1="sa";  
  2. String s2="sa";//编译时让s1与s2指向同一个引用地址  
  3. String s3=new String("sa");//程序运行时给s3一个新的引用地址  
  4. String s4=new String("sa").intern();//程序运行时给s4返回s1和s2所指向的引用地址  
  5.           
  6. System.out.println(s1==s2);  
  7. System.out.println(s1.equals(s2));  
  8. System.out.println(s1==s3);  
  9. System.out.println(s1.equals(s3));  
  10. System.out.println(s1==s4);  
  11. System.out.println(s1.equals(s4));  
  12. System.out.println(s3==s4);  
  13. System.out.println(s3.equals(s4));  

输出结果:

 

  1. true  
  2. true  
  3. false  
  4. true  
  5. true  
  6. true  
  7. false  
  8. true  

对C#的内存分配机制不是很了解,关于String类中==和equals的区别通过程序来验证,可以看出==和equals都是比较值是否相等(在其他引用类中==默认比较引用地址,Equals默认比较值):

 

 

  1. string s1 = "sb";  
  2. string s2 = "sb";  
  3. char[] t={‘s‘,‘b‘};  
  4. String s3 = new String(t);  
  5. Console.WriteLine(s1 == s2);  
  6. Console.WriteLine(s1.Equals(s2));  
  7. Console.WriteLine(s1 == s3);  
  8. Console.WriteLine(s1.Equals(s3));  

输出结果:

  1. true  
  2. true  
  3. true  
  4. true  


总结如有错误之处,还请指出。

Java和C#中String直接赋值与使用new创建(==与equals进行比较)的区别

标签:ar   使用   java   sp   文件   div   on   bs   line   

原文地址:http://www.cnblogs.com/Free-Thinker/p/4070777.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!