黑马程序员技术交流社区
标题:
帮我看看这的需求分析哪里错了,急急急,先谢了。
[打印本页]
作者:
汗血黑马
时间:
2014-3-4 15:05
标题:
帮我看看这的需求分析哪里错了,急急急,先谢了。
:handshake/**
* 需求:6、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)
public class Test {
public static void main(String[] args) {
String s = "abc";
s.substring(1);
s.replace("bc", "xyz");
System.out.println(s);
String value = new String ("abc");
System.out.println(s == value);
}
}
分析:1,String s= "abc";定义了一个字符串常量,abc,一但被初始化就不可改变值。
*· 2.调用String类的substring构造方法,从1角标位索引,返回该字符串的子串"bc".
*3.调用String类的replace构造方法,替换原字符串的字符“bc”为新字符“xyz”.
*4在控制台打印输出字符串s。结果应该为字符串“xyz”.
*5.String value = new String("abc");这是重新定义了字符常量value,并且地址值指向原有字符串"abc"的内存空间。
*6.在控制台打印输出s==value,返回结果是boolean型值。因为常量一但定义无法改变值,所以结果为ture.
*7.借组MyEclipse高级编辑器验证结果。
*/
public class Test6 {
//6、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)
public static void main(String[] args) {
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.和我的结果刚好相反!求分析哪里错了?
作者:
一年_Hei
时间:
2014-3-4 15:50
因为字符串一旦创建就不能修改,你的S一直都没变,s.substring(1); s.replace("bc", "xyz");都是重新创建了一个新的字符串,不过你返回的值都没用String类引用接收,这两句代码执行完等于什么都没做,所以s还是"abc"。
String value = new String ("abc");虽然值一样,但它是重新创建了一个String对象,所以是false
作者:
一年_Hei
时间:
2014-3-4 20:00
一年_Hei 发表于 2014-3-4 15:50
因为字符串一旦创建就不能修改,你的S一直都没变,s.substring(1); s.replace("bc", "xyz");都是重新创 ...
==是比较二个对象的哈希码是否相等。equals方法是Object类中的方法。在默认情况下比和==是一样的。都是比较哈希码。
但这个方法在不同的类中。可能被不同的所重写,一般重写后都是比较二个对象的值是否相等。拿String类做个比喻:== 比较的是二个对象的的引用是不是同一个字符串,而equals比较的是二个对象中的字符串的值是不是相等
作者:
osully
时间:
2014-3-4 20:40
帮你添加了点语句
看看结果 再理解一下
public class IntegerDemo {
public static void main(String[] args) {
String s = "abc";
System.out.println(s.substring(1));
String s1 =s.replace("bc", "xyz");
System.out.println(s);
System.out.println(s1);
String value = new String("abc");
System.out.println(s == value);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2