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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© alexanda 中级黑马   /  2015-1-21 23:20  /  1542 人查看  /  11 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 alexanda 于 2015-1-22 22:14 编辑

String s="abc";这个s的地址值是多少呀?请问下这个语句操作到底创建了对象没有?
还有String类中equals方法不是比较的是字符串的内容吗?
另外请教大家几个问题:
  • 1.判断定义为String类型的s1和s2是否相等
    • String s1 = "abc";
    • String s2 = "abc";
    • System.out.println(s1 == s2);//true,因为==在引用数据类型比较的是地址值
    • System.out.println(s1.equals(s2));//true,因为String类中重写了equals方法,比较的是两个对象,不是地址值了
  • 2.下面这句话在内存中创建了几个对象?
    • String s1 = new String("abc");//
  • 3.判断定义为String类型的s1和s2是否相等
    • String s1 = new String("abc");
    • String s2 = "abc";
    • System.out.println(s1 == s2); ?//false,两个对象地址值不相等
    • System.out.println(s1.equals(s2)); ?//true,两个String对象内容相等
  • 4.判断定义为String类型的s1和s2是否相等
    • String s1 = "a" + "b" + "c";
    • String s2 = "abc";
    • System.out.println(s1 == s2); ?//true,地址值不等
    • System.out.println(s1.equals(s2)); ?//true,内容相同
  • 5.判断定义为String类型的s1和s2是否相等
    • String s1 = "ab";
    • String s2 = "abc";
    • String s3 = s1 + "c";
    • System.out.println(s3==s2); //false
    • System.out.println(s3.equals(s2)); ?//true
旁边的是我的理解,结果是eclipse得到的!请问大家有什么理解吗?尤其是最后一个,为什么s3.equals(s2),结果为false啊?两个变量输出的值都为adc呀?最后一个的确是true,我之前弄错了!

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

11 个回复

倒序浏览
我测了一下s3.equals(s2)的值是true啊,s2,s3的值都是abc比较的值是真
回复 使用道具 举报
alexanda 来自手机 中级黑马 2015-1-21 23:58:11
藤椅
额,我代码弄错了吗?不好意思了,不过我还是不懂String s="abc",语句到底创建了对象没?

点评

abc就是对象  发表于 2015-1-22 11:26
回复 使用道具 举报 1 0
看视频认真点!讲的每句话几乎都会考!
回复 使用道具 举报
alexanda 发表于 2015-1-21 23:58
额,我代码弄错了吗?不好意思了,不过我还是不懂String s="abc",语句到底创建了对象没? ...

“abc”本身就是一个对象了呀。你试试 “abc”..length();  典型的对象调用方法嘛。
回复 使用道具 举报
这个你只要记住有个字符串常量池就好理解了!
回复 使用道具 举报
老外 中级黑马 2015-1-22 12:36:52
7#
第一个:s1与s2同指向同一个对象“abc”所以地址值相同,equals:是比较这个字符串内容是否相同。
第二个:两个对象,new String是一个,“abc”还是一个!
第三个:我的理解是对象不同,所以地址值不一样!
第四个:跟第一个其实是一样的,这里面的+就是连接符,“a”+“b”+“c”,最后还是“abc”;所以解释同第一个!
第五个:你在试试,我刚才试了,System.out.println(s3.equals(s2));打印的true,你肯定是弄错了!至于上面的    s3==s2是false我感觉他们应该不是一个对象,但是为什么,我也不清楚,不敢给你解答!
回复 使用道具 举报
xiaoyi 中级黑马 2015-1-22 15:47:42
8#
看得我一愣一愣的
回复 使用道具 举报
楼上说的对啊
回复 使用道具 举报
String s="abc";这个s的地址值是系统分配的,我不知道,语句操作到底没有创建了对象,个人应该是当成基本数据类型看待,尽管她实质可以看成数组,是引用类型的数据,由于用的比较多java把她封装成基本数据类型,当用new方法时,就是对象了。这个就和装箱和拆箱的原理是一样的。 String类中equals方法是比较的是字符串的内容。

最后一题中equals的结果为TURE,你再测试一次  我测试的为ture
回复 使用道具 举报
alexanda 发表于 2015-1-21 23:58
额,我代码弄错了吗?不好意思了,不过我还是不懂String s="abc",语句到底创建了对象没? ...

String s="abc";这个s的地址值是系统分配的,我不知道,语句操作到底没有创建了对象,个人应该是当成基本数据类型看待,尽管她实质可以看成数组,是引用类型的数据,由于用的比较多java把她封装成基本数据类型,当用new方法时,就是对象了。这个就和装箱和拆箱的原理是一样的。 String类中equals方法是比较的是字符串的内容。

最后一题中equals的结果为TURE,你再测试一次  我测试的为ture
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马