Java String值传递
考虑到Java都是值传递,但是我现在想在方法里对String重新赋值,有没有什么好的方法。比如Stringstr="A";有个方法publicvoidsolve(Stri...
考虑到Java都是值传递,但是我现在想在方法里对String重新赋值,有没有什么好的方法。
比如
String str = "A";
有个方法
public void solve(String str) {
}
我想执行完成后str的值变为str=“B”;
补充:
不能用返回值返回,因为我工程里的代码返回值给其他参数了
方法的参数可以随便,StringBuilder也可以,但是我考虑到这里用stringBuilder的append方法达不到效果。 展开
比如
String str = "A";
有个方法
public void solve(String str) {
}
我想执行完成后str的值变为str=“B”;
补充:
不能用返回值返回,因为我工程里的代码返回值给其他参数了
方法的参数可以随便,StringBuilder也可以,但是我考虑到这里用stringBuilder的append方法达不到效果。 展开
3个回答
展开全部
楼上混淆了 值传递和引用传递
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
解决楼上的问题就是将值传递改成引用传递 look
public class Test {
/**
* 功能描述: <br>
*
* @param args
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static void main(String[] args) {
String a[] = new String [1];
a[0] ="b";
Test t = new Test();
t.test(a);
System.out.println(a[0]);
}
public void test(String ...a)
{
a[0] = "sss";
}
}
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
解决楼上的问题就是将值传递改成引用传递 look
public class Test {
/**
* 功能描述: <br>
*
* @param args
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static void main(String[] args) {
String a[] = new String [1];
a[0] ="b";
Test t = new Test();
t.test(a);
System.out.println(a[0]);
}
public void test(String ...a)
{
a[0] = "sss";
}
}
展开全部
1.虽然这样有点麻烦,但是用StringBuilder可以实现你要的效果:
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "AA";
StringBuilder sour = new StringBuilder(s);
solve(sour);
s=sour.toString();
System.out.println(sour);
}
public static void solve(StringBuilder str) {
str.append("BBB");
}
}
2.另外就是用网友chengbin775所说的数组的方法
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "AA";
String []arr=new String[1];
arr[0]=s;
solve(arr);
s=arr[0];
System.out.println(s);
}
public static void solve(String[] str) {
str[0]+="BBB";
}
}
3.还有,用类封装,虽然可以实现,但是感觉很麻烦
public class Test3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "AA";
Demo d = new Demo();
d.setSour(s);
solve(d);
s = d.getSour();
System.out.println(s);
}
public static void solve(Demo d) {
d.sour += "BBB";
}
}
class Demo {
String sour;
public String getSour() {
return sour;
}
public void setSour(String sour) {
this.sour = sour;
}
}
4.不知道你觉得这些个方法怎么样呢?
更多追问追答
追问
都说了是覆盖了,你的回答前2个方法都是再后面添加(我要的是从"AA"变到"BBB")。方法3我要是写进去,review代码的人估计会吐槽。
追答
1.修改后
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "AA";
StringBuilder sour = new StringBuilder(s);
solve(sour);
s = sour.toString();
System.out.println(sour);
}
public static void solve(StringBuilder str) {
str.setLength(0);
str.append("BBB");
}
}
2.修改后
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "AA";
String []arr=new String[1];
arr[0]=s;
solve(arr);
s=arr[0];
System.out.println(s);
}
public static void solve(String[] str) {
str[0]="BBB";
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用static修饰,然后到方法里面修改就可以 了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询