通过append方法改变str1的值,然而结果不是"0test"。
大家能帮忙解释下原因吗?public class Test0 {
public static void main(String[] args) {
String str="test";
str=str+"0";
System.out.println("当前方法拼接结果:"+str);
String str1="test";
append(str1);
System.out.println("append方法拼接结果:"+str1);
}
public static void append(String str){
str="0"+str;
}
}
大家能帮忙解释下原因吗?public class Test0 {
public static void main(String[] args) {
String str="test";
str=str+"0";
System.out.println("当前方法拼接结果:"+str);
String str1="test";
append(str1);
System.out.println("append方法拼接结果:"+str1);
}
public static void append(String str){
str="0"+str;
}
}
解决方案 »
- 一个分布式计算的毕业设计,求帮助!
- Hibernate session 事务提交回滚问题问题! 请各位大侠指导!
- web project中的struts2.0中获得ApplicationContext可以吗??
- 请教高手,Linux下war包发布提示找不到文件(而文件存在)出错,如何解决?
- web服务器的选择?有些疑问
- 关于EJB的开发
- 请教一个多对多关系使用的问题
- jb里tools->configure里选weblogic时admin concole选项
- JBUILDER8和TOMCAT4.1如何配置配置J2EE环境。
- spring boot热部署(springloader)
- AOP 日志的记录相关问题
- maven怎么处理多个平行module,共享配置文件的情况?
public class Test1 { public static void main(String[] args) {
String str="test";
String a=str;//第一个String的地址
str=str+"0";
String b=str;//第二个String的地址
System.out.println("当前方法拼接结果:"+str);//输出结果:test0
System.out.println("两个字符串地址是否一样:"+(a==b));//输出结果:false,不一样,说明指向常量池的地址不同
String str1="test";
append(str1);
System.out.println("append方法拼接结果:"+str1);//输出结果:test
}
public static void append(String str){//此处str不是对象,只是字面量(引用的常量池中的),在方法外面不会保留方法里的改变
str="0"+str;
System.out.println("方法里面:"+str);//输出结果:test0
}
}
{
String str = str1; // str指向内存地址ox0001
str="0"+str; // 生成新的字符串"0test",地址为ox0002,str指向内存地址ox0002
}
System.out.println(str1); //输出ox0001的内容"test"
可以使用stringbuffer做参数传递 这个是引用类型 不特殊
或者
public static void changeString(String s) throws Exception{
String re = s;
s = "12345"; //将s改成新的字符串
Field valueFieldOfString = String.class.getDeclaredField("value");
valueFieldOfString.setAccessible(true);
valueFieldOfString.set(re,s.toCharArray());
}
在java中方法的所用参数都是“传值”的,也就是说,方法中参数变量的值是调用指定值得拷贝。相当于生活中的“原件”(str1)和“复印件”(str)。方法对复印件进行操作,并不影响原件。