2014-11-14 4 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

+0

'Это работает:' Я сомневаюсь. 'setStringInt' практически ничего не делает. – njzk2

ответ

0

Обновить ваш следующий метод

общественного недействительными setStringInt (String s) { s = String.valueOf (Минт); }

следующим

общественности недействительным setStringInt (String S) { 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 и попытаетесь установить ее равной величине String для состояния int, вы не сможете изменить переданную ссылку. Строка неизменна, поэтому вы не получаете то, что хотите.

Ваша логика довольно запутанна. Я не могу сказать, что вы хотите сделать здесь. Но вот моя догадка:

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

Но, как упоминалось выше, эти методы используют вызов по значению не называют ссылками, следовательно, вы не изменитесь переменной звонящий.

Смежные вопросы