2014-11-14 201 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); 
} 

但正如上面提到這些方法使用的呼叫按值不是引用調用,因此你會不會改變來電變量。