String的问题 不是说String是不可修改的吗,得用StringBuffer,但是我编了个程序试验String a = "a";a = a + "b";System.out.println(a);结果输出:ab请问这是怎么回事呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那这样java定义的String不可更改就没有任何意义了啊? a--->“a”在内存的一个地方,"a"就不能更改了“ab”在内存的另一个地方 public class TestString { public static void main(String[] args) { String a = "a"; String b = "a"; System.out.println(a == b); a = a + "b"; System.out.println(a == b); }}/* * 首先在用== 号比较时,是比较的两个对象的地址,而不是内容。 * 上面的程序的输出结果为true 与 false。说明了什么 。在创建 b 这个对象的时候, * 是先查找是否已存在"a"这个对象(也就是a),已有了,所以,第一个输出 true;而第 * 二个输出false 说明,些时的a对象之前的a 不是同一个对象。说明在进行a = a + "b"; * 这句时,a就指向了重新创建的一个对象"ab",所以输出false; * 不知道这样理解有误不,有误请指教。 */ 楼主应该是没有看String常量池的内容吧,String类是不可修改,但是a = a+"b";就新建了一个字符串“ab”,并把它赋给a,a引用了新的对象“ab”,原来的“a”被放入内存常量池中,如果String a = "a";String b = a + "b";System.out.println(a);结果输出为“a”,a并没有改变。新建了Sting对象“ab”并赋给b建议楼主仔细看看,多举例子,很容易就明白了 public class Test { /** * 测试String对象 * @param args */ public static void main(String[] args) { String s="abc";//创建“abc"对象并放入对象池中。 s=s+"123";//在对象"abc"后面追加"123",并没有创建新对象。 s=s.substring(2,5);//创建新对象s. s=s.toLowerCase();//创建新对象s. String s1="abc"+"123";//此语句一共创建了三个对象:"abc"、"123"、s1 String s2=new String("abc");//此语句一共创建了二个对象:对象池中的"abc"、椎中的s2 }} 求教怎么输入字符 求助 :一个关于内部类的问题 和 强制转型 代码如何实现这个算法(找出近似度高的重复值记录) 抽象 js中传递函数的问题 输入一个字符串,如何求其中字母a的个数? super问题 自动登陆VPN的java程序怎么写? ----如何取到TextPane中当前行的文本----- 我们的团队需要你!! 为了java有没有必要安装Linux? java多线程的同步问题
“ab”在内存的另一个地方
public static void main(String[] args) {
String a = "a";
String b = "a";
System.out.println(a == b);
a = a + "b";
System.out.println(a == b);
}
}
/*
* 首先在用== 号比较时,是比较的两个对象的地址,而不是内容。
* 上面的程序的输出结果为true 与 false。说明了什么 。在创建 b 这个对象的时候,
* 是先查找是否已存在"a"这个对象(也就是a),已有了,所以,第一个输出 true;而第
* 二个输出false 说明,些时的a对象之前的a 不是同一个对象。说明在进行a = a + "b";
* 这句时,a就指向了重新创建的一个对象"ab",所以输出false;
* 不知道这样理解有误不,有误请指教。
*/
String a = "a";
String b = a + "b";
System.out.println(a);
结果输出为“a”,a并没有改变。新建了Sting对象“ab”并赋给b
建议楼主仔细看看,多举例子,很容易就明白了
* 测试String对象
* @param args
*/
public static void main(String[] args) {
String s="abc";//创建“abc"对象并放入对象池中。
s=s+"123";//在对象"abc"后面追加"123",并没有创建新对象。
s=s.substring(2,5);//创建新对象s.
s=s.toLowerCase();//创建新对象s.
String s1="abc"+"123";//此语句一共创建了三个对象:"abc"、"123"、s1
String s2=new String("abc");//此语句一共创建了二个对象:对象池中的"abc"、椎中的s2 }}