黑马程序员技术交流社区
标题:
String 可变问题!<已解决>
[打印本页]
作者:
余银桂
时间:
2012-6-14 22:47
标题:
String 可变问题!<已解决>
本帖最后由 余银桂 于 2012-6-14 23:10 编辑
public class Test2{
public static void stringReplace(String text){
text=text.replace('j','l');
}
public static void bufferReplace(StringBuffer text){
text=text.append("c");
}
public static void main(String args[]){
String textString=new String("java");
StringBuffer textBuffer=new StringBuffer("java");
stringReplace(textString);
bufferReplace(textBuffer);
System.out.println(textString+textBuffer);
}
}
运行结果是 javajavac
为什么String的那个没变? 在String中 哪些是可变的?哪些又不可变?
复制代码
作者:
王晓新
时间:
2012-6-14 23:03
public class Test2
{
public static String stringReplace(String text){
text=text.replace("j","l");
return text;
}
public static void bufferReplace(StringBuffer text){
text=text.append("c");
}
public static void main(String args[]){
String textString=new String("java");
StringBuffer textBuffer=new StringBuffer("java");
bufferReplace(textBuffer);
System.out.println(stringReplace(textString)+textBuffer);
}
}
复制代码
作者:
王晓新
时间:
2012-6-14 23:05
text=text.replace('j','l'); 这条这样写也是对的
作者:
梁清平
时间:
2012-6-14 23:06
楼主啊。。。你这个程序不在于String中什么可变不可变。。。
问题在于你的程序编写的有问题。。。
stringReplace(textString);这句代码的改变的只是stringReplace方法内部的text局部变量的值。。当方法运行结束时。。这个变量也消失了。。跟没调用一样样的。。。
对传入的textString更是没造成任何改变。。
至于StringBuffer你调用的是append方法。。当然后追加进去了。。实际上也跟上面的情况一样。。局变量也被改了。。但也消失了。。但是原串也追加进去了。。
你这两方法封装的实在没必要。。代码写成这样就会不一样了。。
public class Test2{
public static void stringReplace(String text){
text=text.replace('j','l');
}
public static void bufferReplace(StringBuffer text){
text=text.append("c");
}
public static void main(String args[]){
String textString=new String("java");
textString = textString.replace('j','l');//多加这一句。。
StringBuffer textBuffer=new StringBuffer("java");
stringReplace(textString); //这方法调也没用
bufferReplace(textBuffer);
System.out.println(textString+textBuffer);
}
}
作者:
余银桂
时间:
2012-6-14 23:09
梁清平 发表于 2012-6-14 23:06
楼主啊。。。你这个程序不在于String中什么可变不可变。。。
问题在于你的程序编写的有问题。。。
stringRe ...
哦,搜滴寺内,了解了!
作者:
余银桂
时间:
2012-6-14 23:09
梁清平 发表于 2012-6-14 23:06
楼主啊。。。你这个程序不在于String中什么可变不可变。。。
问题在于你的程序编写的有问题。。。
stringRe ...
哦,搜滴寺内,了解了!
作者:
王明明
时间:
2012-6-14 23:11
public static void main(String args[]){
String textString=new String("java");
StringBuffer textBuffer=new StringBuffer("java");
stringReplace(textString); //虽然这里调用了stringReplace()方法,但是并没有为textString赋值,所以textString的值仍然是"java"
bufferReplace(textBuffer); //这里StringBuffer进行了append追加,其值为"javac"
System.out.println(textString+textBuffer); //"java"+"javac"
}
}
这样就可以得到你想要的结果了:
public class Test {
public static String stringReplace(String text) {
text = text.replace("j", "L");
return text;
}
public static void bufferReplace(StringBuffer text) {
text = text.append("c");
}
public static void main(String args[]) {
String textString = new String("java");
StringBuffer textBuffer = new StringBuffer("java");
textString = stringReplace(textString);
bufferReplace(textBuffer);
System.out.println(textString + textBuffer);
}
}
复制代码
作者:
王明明
时间:
2012-6-14 23:12
public static void main(String args[]){
String textString=new String("java");
StringBuffer textBuffer=new StringBuffer("java");
stringReplace(textString); //虽然这里调用了stringReplace()方法,但是并没有为textString赋值,所以textString的值仍然是"java"
bufferReplace(textBuffer); //这里StringBuffer进行了append追加,其值为"javac"
System.out.println(textString+textBuffer); //"java"+"javac"
}
}
这样就可以得到你想要的结果了:
public class Test {
public static String stringReplace(String text) {
text = text.replace("j", "L");
return text;
}
public static void bufferReplace(StringBuffer text) {
text = text.append("c");
}
public static void main(String args[]) {
String textString = new String("java");
StringBuffer textBuffer = new StringBuffer("java");
textString = stringReplace(textString);
bufferReplace(textBuffer);
System.out.println(textString + textBuffer);
}
}
复制代码
作者:
张頔
时间:
2012-6-14 23:15
public class Demo{
public static void stringReplace(String text){
//你的方法没有返回值,这里就有局部变量和成员变量的问题
//这里的 text虽然变化了但是并没有返回给主函数中的textString
text=text.replace('j','l');
}
public static void bufferReplace(StringBuffer text){ //这个也是上边的原因
text=text.append("c");
}
public static void main(String args[]){
String textString=new String("java");
StringBuffer textBuffer=new StringBuffer("java");
stringReplace(textString);
bufferReplace(textBuffer);
System.out.println(textString+textBuffer);
}
}
//运行结果是 javajavac
//为什么String的那个没变? 在String中 哪些是可变的?哪些又不可变?
作者:
揭耀祖
时间:
2012-6-14 23:40
public static void stringReplace(String text){ //String是当做基本数据类型传递参数的,在java中基本数据类型在进行函数参数传递时是以值传递的,text只是在这个函数内改变了但是原地址中的值没变,而StringBuffere是类类型对象,是以地址传递的,所以如果这里把String改成StringBuffere的话那么输出的就是“lava”。
//第二种方案就是再加个return text;语句的话结果也是“lava”.
text=text.replace('j','l');
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2