我的java类有一些非常疯狂的问题。代码将解释它:
这是我的班级:
public class myclass
{
public int myint;
public String mystring;
public myclass()
{
myint = 0;
mystring = "Test";
}
public void setStringInt(String s)
{
s = String.valueOf(myint);
}
public void somefunc()
{
setStringInt(mystring);
}
}
这是MainActivity的一部分:
//...
public myclass thisismyclass;
public String mysecondstring;
//...
thisismyclass = new myclass();
thisismyclass.myint = 5;
thisismyclass.somefunc();
//...
thisismyclass.mystring的输出是"测试"。为什么代码没有将它设置为" 5"? 我试了一下。这有效:
//...
thisismyclass.myint = 5;
thisismyclass.setStringInt(thisismyclass.mystring);
//...
但为什么其他代码不起作用?
MFG lolxdfly
编辑:对不起..我写错了..我的代码是mystring!
答案 0 :(得分:2)
s = String.valueOf(myint);
内的{p> setStringInt
不会更改来电者的字符串值。
这是因为字符串引用与值一起传递,所有Java函数参数都是如此。
答案 1 :(得分:0)
除了构造函数之外,您没有将mystring
值设置在任何位置。你的意思是写这个:
public void setStringInt(String s)
{
mystring = String.valueOf(myint);
}
答案 2 :(得分:0)
Java按值传递参数。
当您将该String引用传递给setStringInt并尝试将其设置为等于int状态的String值时,您无法更改传入的引用。字符串是不可变的,因此您无法获得所需的内容。 / p>
你的逻辑很复杂。我不知道你想在这做什么。但这是我最好的猜测:
public class MyClass
{
public int myint;
public String mystring;
public MyClass()
{
myint = 0;
mystring = "Test";
}
public void setStringInt(String s)
{
this.myint = Integer.valueOf(s);
this.mystring = s;
}
public void setStringInt(int i) {
this.myint = i;
this.mystring = Integer.parseInt(i);
}
public void somefunc()
{
setStringInt(myint);
}
}
答案 3 :(得分:0)
你应该纠正这个:
public void somefunc()
{
setStringInt(mystring);
}
但如上所述,这些方法使用按值调用而不是通过引用调用,因此您不会更改调用者变量。
答案 4 :(得分:0)
更新以下方法
public void setStringInt(String s) { s = String.valueOf(myint); }
如下
public void setStringInt(String s) { mystring = String.valueOf(myint); }