解决方案 »
- jsp 页面文本框值累加
- [Hibernet+ehcache]每次查询后都提示缓存过期,然后执行update
- 字符串运算公式求值问题
- 多个checkbox传值
- 看谁想得最好???
- 一个在eclipse中才出现的异常
- 请教 struts 中<bean:define? 如何使用
- http://www-900.ibm.com/developerWorks/cn/wsdd/techjournal/0110_wosnick/index.shtml 出错 求救!
- 谁有 Sun ONE Studio for Java 技术教程 电子版下载?
- 小白求教
- jsp 权限在页面处理的缺陷
- 急求助:EJB中怎样让某个类随容器启动?
不都是对象嘛,问题是我要怎么改进以上代码,才能使我在打印语句的那边拿到重新赋值的a和b?而不是null
a和b就是普通的两个空的string,这两个值我要在第一次的遍历中赋值,然后第二次遍历时传入到getValue的方法里面去之后,这一次会用的到第一次的赋值
方法如下private static void getValue (a, b, ...) {
a = "***";
b = "&&&";
}肯定是赋值了
private String b = null;
public void method(String a,String b){
a = a;
b = b;
}
}
上面的代码和下面的代码public class Test { private String a = null;
private String b = null;
public void method(String aaa,String bbb){
a = aaa;
b = bbb;
}
}和下面的public class Test { private String a = null;
private String b = null;
public void method(String a,String b){
this.a = a;
this.b = b;
}
}
是不同的,楼主别晕啊,呵呵
先了解一下java的传值吧 java只传两种 一是int (类似这种)类型的 他传的是原来值的拷贝
一个是String(类似这种)类型的 他传的是引用 不是地址
你说的很有道理,我也想到是这个问题,可是我将变量初始值赋值为空字符串,也不行难道只能用StringBuilder了?
所以Java里面这样的修改不会有效果
a = 这样的修改都不会使得外部a的值发生任何改变只有调用a.xxx()这样才可能导致a的值发生变化
static String a = null; public static void getValue(){
a="%%%";
}
这样写就能改了 ,不知道你要怎么改
即使for循环外面的变量改为StringBuilder也不行?
package tes;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class TestReplace {
static String s=null;
public static void getS(String s){
s="aa";
System.out.println("s1"+s);
}
public static void main(String[] args) {
getS(s);
System.out.println("s2"+s);s1aa s2null 看这个就明白了吧
调用该方法的时候,这2个引用指向同一个对象.你在方法中赋值,只是把方法参数的句柄a的指向改变了,并没有改变getValue方法外面的句柄a的指向,所以结果当然是null.
public class TestMian {
public static void main(String[] args){
StringBuffer a = new StringBuffer();
StringBuffer b = new StringBuffer();
for (int i =1; i<10;i++){
getValue(a, b);
System.out.println(a+","+b);
} }
private static void getValue (StringBuffer a, StringBuffer b) {
a.append("***");
b.append("&&&");
}
}
输出结果为:
***,&&&
******,&&&&&&
*********,&&&&&&&&&
************,&&&&&&&&&&&&
***************,&&&&&&&&&&&&&&&
******************,&&&&&&&&&&&&&&&&&&
*********************,&&&&&&&&&&&&&&&&&&&&&
************************,&&&&&&&&&&&&&&&&&&&&&&&&
***************************,&&&&&&&&&&&&&&&&&&&&&&&&&&&
为什么getValue(a, b)方法之后,a,b的值进行了修改,是因为该方法传递的参数其实是把对象在内存中的地址拷贝了一份给参数,对a,b进行修改,其实也就修改了原来的值。
但是为什么String不行呢,是因为String是一个final型的,像楼主那样a="**",其实是将这个参数a指向了另一个对象“**”,而原始的a还是指向null。这种传递对象的的方法间接的也存在一个问题:当创建了一个对象,如果将这个对象作为一个方法的参数,而该方法有对这个对象引用进行了修改,那么该对象也就变了,所以在程序设计中要注意这个问题,很可能就给自己带来了麻烦。
不知道分析的对不对,请多提意见
多谢分析外加实践操作,我已经改用StringBuilder了!