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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李前进 中级黑马   /  2014-3-14 14:38  /  2222 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s = "abc";
s.substring(1);
s.replace("bc", "xyz");
System.out.println(s);
String value = new String ("abc");
System.out.println(s == value);

结果为什么会是:abc false?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

7 个回复

倒序浏览
substring和replace这两个方法都有返回值,对s进行了操作并没有赋值给s,所以不会变化,况且String类一旦被初始化,就不会被改变,重新赋值,只是把引用地址改了,对象还在内存中。后面的之所以为false,是因为String s=“abc”,创建了一个对象,String value = new String ("abc");创建了两个对象,一个是new,一个是“abc”。
回复 使用道具 举报
zengming13 发表于 2014-3-14 14:42
首先要明白的是字符串是不可以修改的!!!
String s = "abc";
s.substring(1);  //截最字符串,返回的是截 ...

很清晰,明白了!
回复 使用道具 举报
楼上大哥说的真详细,其实你调用的两个字符串的函数都是有返回值的,修改后的字符串应在返回值里,这样就行了。另外字符串比较是否相同用的是equals方法,==只能比较地址值,但两个字符串是两个不同的对象,所以返回值是false;
  1. s=s.subString(1);
  2. s=s.replace("bc","xyz");
复制代码
回复 使用道具 举报
s.replace("bc", "xyz");,你这句话没有赋值给S啊,应该这样s=s.replace("bc", "xyz");
回复 使用道具 举报
请楼主不要拿基础面试题来贴吧里问,不然,就失去了选拔的意义了
回复 使用道具 举报
Pinfan 中级黑马 2015-10-18 20:30:28
7#
谜燕 发表于 2014-3-14 14:48
substring和replace这两个方法都有返回值,对s进行了操作并没有赋值给s,所以不会变化,况且String类一旦被 ...

明白了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马