Я читала, что если в метод передать примитивный тип переменной, то она не поменяется, а если передаем ссылочный тип - тогда меняется, но код ниже не меняет переменные а и s. Почему? Или методы меняют только поля объекта?
public class JavaSH_Recurc {
public void change( Integer a,String s){
a = 9;
s= "!!!";
}
void qsort(char items [], Integer q, String s) {
qs(items,0,items.length-1);
q = 15;
s = "Поменяли";
System.out.println();
}
//private метод только там, где метод используется только в этом классе
// и простые и ссылочные меняет???
private static void qs(char items [], int left, int right) {
int i,j;
char x,y;
i = left;
j = right;
x = items[(left+right)/2];
do{
while ((items[i]<x)&&(i<right)) i++;
while ((x<items[j])&&(j>left)) j--;
if(i<=j){
y = items[i];
items[i]=items[j];
items[j]=y;
i++;j--;
}
}while (i<=j);
if(left<j) qs(items, left,j);
if(i<right) qs(items, i,right);
}
}
class SQDemo{
public static void main(String[] args) {
//объвление в char - скобки
//меняется, т.к массив - это ссылочный тип данных
char a[]= { 'd','x','a','r','z'};
int i;
// почему эти переменные не меняются???
Integer q=3;
String s = "Ja";
System.out.println("Исходный массив");;
for(i = 0;i<a.length;i++){
System.out.print(a[i] + " ");
}
System.out.println(q + s);
System.out.println();
JavaSH_Recurc j = new JavaSH_Recurc();
j.qsort(a,q,s);
j.change(q,s);
///
for(int n = 0;n<a.length;n++){
System.out.print(a[n] + " ");
}
System.out.println("новая " +q +s);
}
}
Olja Horoshilova
23 уровень
Изменение переменных через методы
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
9 января 2021, 18:23решение
Это работает не так.
Например
твой метод получил ссылки на два объекта - Integer (в переменной a) и String (в переменной s).
Но затем он "выкидывает" эти ссылки и кладет в переменные ссылки на совсем другие объекты.
И что бы ни происходило с этими объектами дальше - это не будет иметь никакого отношения к исходным объектам.
Более того, экспериментировать с Integer и String - вообще не очень удачная идея, так как оба эти класса - immutable, неизменяемые. То есть объекты этих классов нельзя модифицировать после их создания в принципе.
+2
Olja Horoshilova
9 января 2021, 21:09
Но при этом, если я в метод передаю объект и меняю поля объекта, то они действительно меняются, правильно?
0
Ksenia VolkovaJava Developer в DXCMaster
9 января 2021, 21:51
Правильно.
+2
Olja Horoshilova
10 января 2021, 10:39
Ксения, спасибо!
0