Size: a a a

2020 October 14

L

Linnik 🎄 in learn.java
ns ...
Как тогда понимать такое утверждение в степике?, что при измененни ссылку у одной переменной, ссылка у второй тоже изменяется.
Не услышал тут такого утверждения
источник

АК

Антон Кунах... in learn.java
Речь о изменении объекта по ссылке.
источник

АК

Антон Кунах... in learn.java
Т.е. если две переменные ссылаются на один List и ты по первой ссылке добавишь в него новый элемент - по второй ссылке ты можешь этот новый элемент получить, потому что объект List один и тот же.
источник

ch

central hardware in learn.java
Антон Кунах
Речь о изменении объекта по ссылке.
а чего же вы не написали "речь об изменение ссылки"
источник

АК

Антон Кунах... in learn.java
Кто "мы"?
источник

АК

Антон Кунах... in learn.java
На видео тут https://t.me/javastart/272549 на 1:13 говорится
"Если через вторую ссылку объект модифицируется то те же самые изменения будут видны и через первую ссылку"
И это правильно. Просто на картинке неудачный пример - String иммутабельны, а переназначение ссылок - не модификация объекта.
С List пример удачнее.
Утверждения "при измененни ссылку у одной переменной, ссылка у второй тоже изменяется" в видео нет.
источник

n.

ns ... in learn.java
Антон Кунах
Т.е. если две переменные ссылаются на один List и ты по первой ссылке добавишь в него новый элемент - по второй ссылке ты можешь этот новый элемент получить, потому что объект List один и тот же.
Я может что-то не понимаю, но что в моем коде не так тогда, чтобы увидеть как это изменение ссылки работает на практике?
       String s="Hello World!";
       String t=s;
       s="Natasha!";
      System.out.println("s="+s);
      System.out.println("t="+t);
      System.out.println(s+t);

D:\programs\java\bin\java.exe "
s=Natasha!
t=Hello World!
Natasha!Hello World!

Process finished with exit code 0
источник

n.

ns ... in learn.java
У меня s и t разные
источник

AK

Alex K. in learn.java
ns ...
Я может что-то не понимаю, но что в моем коде не так тогда, чтобы увидеть как это изменение ссылки работает на практике?
       String s="Hello World!";
       String t=s;
       s="Natasha!";
      System.out.println("s="+s);
      System.out.println("t="+t);
      System.out.println(s+t);

D:\programs\java\bin\java.exe "
s=Natasha!
t=Hello World!
Natasha!Hello World!

Process finished with exit code 0
Так ты переназначаешь ссылку s на другой объект
источник

АК

Антон Кунах... in learn.java
ns ...
Я может что-то не понимаю, но что в моем коде не так тогда, чтобы увидеть как это изменение ссылки работает на практике?
       String s="Hello World!";
       String t=s;
       s="Natasha!";
      System.out.println("s="+s);
      System.out.println("t="+t);
      System.out.println(s+t);

D:\programs\java\bin\java.exe "
s=Natasha!
t=Hello World!
Natasha!Hello World!

Process finished with exit code 0
package com.company;

import java.util.ArrayList;
import java.util.List;

class Main {
   public static void main(String[] args) {
       List<String> a = new ArrayList<>();
       List<String> b = a;

       a.add("Hello, world!");

       System.out.println(a.get(0));
       System.out.println(b.get(0));
   }
}


Через "b" я ничего в List не добавлял. Добавил только через переменную "a". Но получить добавленную строку могу и по переменной "a" и по переменной "b" потому что они ссылаются на один объект.

Со строками такой фокус провернуть не удастся - у строки нельзя изменить внутреннее состояние.
источник

L

Linnik 🎄 in learn.java
Антон Кунах
package com.company;

import java.util.ArrayList;
import java.util.List;

class Main {
   public static void main(String[] args) {
       List<String> a = new ArrayList<>();
       List<String> b = a;

       a.add("Hello, world!");

       System.out.println(a.get(0));
       System.out.println(b.get(0));
   }
}


Через "b" я ничего в List не добавлял. Добавил только через переменную "a". Но получить добавленную строку могу и по переменной "a" и по переменной "b" потому что они ссылаются на один объект.

Со строками такой фокус провернуть не удастся - у строки нельзя изменить внутреннее состояние.
Человек ещё не дошёл до листов
источник

L

Linnik 🎄 in learn.java
Он строки изучает
источник

АК

Антон Кунах... in learn.java
Ну, со строками это не объяснить наглядно. По крайней мере сходу пример не получается выдумать.
источник

n.

ns ... in learn.java
Антон Кунах
package com.company;

import java.util.ArrayList;
import java.util.List;

class Main {
   public static void main(String[] args) {
       List<String> a = new ArrayList<>();
       List<String> b = a;

       a.add("Hello, world!");

       System.out.println(a.get(0));
       System.out.println(b.get(0));
   }
}


Через "b" я ничего в List не добавлял. Добавил только через переменную "a". Но получить добавленную строку могу и по переменной "a" и по переменной "b" потому что они ссылаются на один объект.

Со строками такой фокус провернуть не удастся - у строки нельзя изменить внутреннее состояние.
Это сложно пока что мне понимать. Извините
источник

n.

ns ... in learn.java
Просто хотел увидеть как изменить ссылку у s и чтобы ссылка у t тоже изменилась. Что-то типа такого...
источник

n.

ns ... in learn.java
То есть не ссылку, а как я понял изменить объект через ссылку
источник

AK

Alex K. in learn.java
ns ...
Просто хотел увидеть как изменить ссылку у s и чтобы ссылка у t тоже изменилась. Что-то типа такого...
Такое прокатит с примитивами.У стринги создаётся ссылка на новый объект.Если память не изменяет.
источник

АК

Антон Кунах... in learn.java
Сейчас знаешь только про примитивы и строки? Тогда не заморачивайся пока. Оставь пометку, вернешься позже, когда будешь проходить коллекции и/или ООП.
источник

n.

ns ... in learn.java
Антон Кунах
Сейчас знаешь только про примитивы и строки? Тогда не заморачивайся пока. Оставь пометку, вернешься позже, когда будешь проходить коллекции и/или ООП.
Ок. Спасибо. Так и сделаю...
источник

GV

Gukov Viktor in learn.java
ns ...
Это сложно пока что мне понимать. Извините
Смотри. Есть такой код, который по сути делает тоже самое:
        char[] first = "hello".toCharArray();
       char[] second = first;
       first[0] = 'm';

       System.out.println(first);
       System.out.println(second);

Что он делает:
1. Создает массив символов содержащих "hello" и сохраняет ссылку на него в переменную first
2. Создает новую ссылку second, которая ссылается на тот же самый массив символов "hello"
3. Через первую ссылку изменяет первый элемент массива с "h" на "m"
4. Печатает результат который будет
mello
mello

Тут как раз работает принцип описанный в видео. У тебя есть две ссылки, которые ссылаются на один и тот же объект. И так как они ссылаются на один и тот же объект, ты можешь изменить его с помощью любой из ссылок, и каждая из них в результате будет ссылаться на измененный объект.
https://i.imgur.com/nbT8Is6.png
источник