A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jiahuiting 中级黑马   /  2013-9-25 16:50  /  1849 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

string  s1="abc"   与   string  s2=new  string("abc")   的区别是什么记得当时视频上说,s1==s2(false)     但是s1.equal(s2)(true)

为啥呢。equal不是判断地址相同的本意么

4 个回复

倒序浏览

  1. public class test {
  2.         public static void main(String[] args) {
  3.                 String s1 = "abc";
  4.                 String s2 = new String("abc");
  5.                 System.out.println("s1==s2" + s1==s2);
  6.                 System.out.println("s1.equal(s2)" + s1.equals(s2));
  7.         }
  8. }
复制代码
结果和你说的一样。==是比较引用的是否是一个对象。而equal()方法比较的是字符串是否相等。
回复 使用道具 举报

当系统执行string s1="abc";时会将s1指向"abc"而string  s2=new  string("abc") 系统会重新分配一个空间给"abc"并将s2指向该空间  建立了一个对象
引用型变量进行==运算时也就是它们的地址进行运算所以s1==s2(false)
equals比较的是内容
回复 使用道具 举报
string s1="abc";的意义是赋值,string s2=new string(“abc”);的意义是初始化
回复 使用道具 举报
先是在内存里创建了一个abc字符串,然后s1指向abc,s2要指向abc,内存中已经有abc,所以s1和s2地址相同,s3指向的是新字符串abc的地址,所以s1与s3不同,s1==s2但s1!=s3,因为s1,s2,s3是引用,比较的是地址而不是内容,所以有这个结果,比较值是否相同应该用。equal函数而不能直接用==
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马