2014-11-14 181 views
-1

我有一些非常疯狂的问题与我的java类。该代码将explan它: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

S应该是myString在setter函数中 – cYrixmorten 2014-11-14 15:16:30

+0

'This works:'我怀疑它。 'setStringInt'几乎不做任何事情。 – njzk2 2014-11-14 15:23:15

回答

0

更新您的以下方法

公共无效setStringInt(字符串或多个) { S =将String.valueOf(敏); }

如下

公共无效setStringInt(字符串或多个) { 了mystring =将String.valueOf(敏); }

0

除了在构造函数中,您并未将值设置为mystring。您是不是要这样写:

public void setStringInt(String s) 
{ 
    mystring = String.valueOf(myint); 
} 
1

s = String.valueOf(myint);setStringInt变化呼叫者的字符串值。

这是因为与所有Java函数参数一样,字符串引用以的值传递

0

Java按值传递参数。

当您将该String引用传递给setStringInt并尝试将其设置为等于int状态的String值时,您无法更改传入的引用。字符串是不可变的,因此您不会获得所需内容。

你的逻辑是相当复杂的。我无法说出你想在这里做什么。但这里是我最好的猜测:

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); 
    } 
} 
0

你应该纠正这种给:

public void somefunc() 
{ 
    setStringInt(mystring); 
} 

但正如上面提到这些方法使用的呼叫按值不是引用调用,因此你会不会改变来电变量。