powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Преобразование типов
12 сообщений из 12, страница 1 из 1
Преобразование типов
    #34106287
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас читаю Экеля, не много не понял про автоматическое преобразование типов. На счет числовых типов данных вроде понятно : при расширении типа происходит автоматический каст, при съужении надо явно указывать. А вот про стриг не понял:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Использование String + имеет некоторые интересные черты поведения Если выражение начинается со String, то все операнды, которые идут дальше, должны быть типа String (помните, что компилятор превратит указанную последовательность символов в String):
 int  x =  0 , y =  1 , z =  2 ;
String sString = "x, y, z ";
System.out.println(sString + x + y + z);

Здесь компилятор Java преобразует x, y и z в предстваление String, вместо того, чтобы сначала их сложить вместе. А если вы скажете:
System.out.println(x + sString);

Java переведет x в String.

Какие правила использует компилятор? Т.е. если первый операнд есть String тогда все последующие преобразуем тоже в стринг. Тогда следуя данной логике, имея первый операнд ИНТ (второй случай), все последующии тоже должны преобразовываться в ИНТ...
...
Рейтинг: 0 / 0
Преобразование типов
    #34106302
Cyb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Порядок сумы не изменяет... System.out.println() автоматически вызывает подходящий toString() метод, для всех примитивных типов и обьектов.
...
Рейтинг: 0 / 0
Преобразование типов
    #34106307
Cyb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если так: то просто получим exception несовместимость типов.
Код: plaintext
1.
x +=  sString;
sString = y + z;
...
Рейтинг: 0 / 0
Преобразование типов
    #34106310
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CybПорядок сумы не изменяет... System.out.println() автоматически вызывает подходящий toString() метод, для всех примитивных типов и обьектов.
Т.е. особенности реализации оператора +? просто в С++ если пишем:
operator + (int,string) и
operator + (string, int) это есть разные вещи.

а тут получается не важно какой оперант первый а какой второй, все равно число приводим к string. Так? Или че-то путаю?
...
Рейтинг: 0 / 0
Преобразование типов
    #34106315
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CybПорядок сумы не изменяет... System.out.println() автоматически вызывает подходящий toString() метод, для всех примитивных типов и обьектов.

И как println может вызывать какие-либо функции преобразования если все эти преобразования должны быть по идее сделаны ДО входа в тело println?
...
Рейтинг: 0 / 0
Преобразование типов
    #34106362
Cyb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bemtaillпреобразования должны быть по идее сделаны ДО входа в тело println?

Это уже особенности Java... У Экеля об этом где-то было написано.
...
Рейтинг: 0 / 0
Преобразование типов
    #34106370
Cyb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bemtaillа тут получается не важно какой оперант первый а какой второй, все равно число приводим к string

В println это так.

А если попробуешь так:
Код: plaintext
1.
2.
x = ( int )  sString;
 sString =(String) y + z;
то получешь exception неконвертируемость типов:
...
Рейтинг: 0 / 0
Преобразование типов
    #34106375
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyb bemtaillа тут получается не важно какой оперант первый а какой второй, все равно число приводим к string

В println это так.

А если попробуешь так:
Код: plaintext
1.
2.
x = ( int )  sString;
 sString =(String) y + z;
то получешь exception неконвертируемость типов:

Спасибо, пока приму на веру, буду дальше читать:)
...
Рейтинг: 0 / 0
Преобразование типов
    #34106376
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья, что за охинея.
Вычисления в java выполняются слева на права, присвоения выполняются с права на лево.
Оператор + переопределён так, что если один из его операндов строка, то второй переводится в строку вызовом toString.


Итого:
Код: plaintext
1.
2.
3.
4.
5.
6.
 int  x =  1 ;
 int  y =  2 ;
String s = "s";

x + y + s = (x + y) + s =  3  + "s" = "3s";
s + x + y = (s + x) + y = "s1" + y = "s12";
...
Рейтинг: 0 / 0
Преобразование типов
    #34106384
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsДрузья, что за охинея.
Вычисления в java выполняются слева на права, присвоения выполняются с права на лево.
Оператор + переопределён так, что если один из его операндов строка, то второй переводится в строку вызовом toString.


Итого:
Код: plaintext
1.
2.
3.
4.
5.
6.
 int  x =  1 ;
 int  y =  2 ;
String s = "s";

x + y + s = (x + y) + s =  3  + "s" = "3s";
s + x + y = (s + x) + y = "s1" + y = "s12";


Да я ж учусь тока... Хотя я выдвигал такое предположение, но оно не подтвердилось:
http://www.sql.ru/forum/actualpost.aspx?bid=38&tid=358482&mid=3358024&p=1&act=quot#3357901
...
Рейтинг: 0 / 0
Преобразование типов
    #34106385
Cyb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CybSystem.out.println() автоматически вызывает подходящий toString() метод


Ошибочка вышла ;(
...
Рейтинг: 0 / 0
Преобразование типов
    #34106595
leafox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
int x = 0, y = 1, z = 2;
String sString = "x, y, z ";
System.out.println(sString + x + y + z);


int x = 0, y = 1, z = 2;
String sString = "x, y, z ";
System.out.println( sString + (x + y + z) );

Нужно учитывать приоритетность выполнения операций. Сначала будет выполнено то, что в скобках. Потом при сложении произойдет преобразование полученного числа в строку, а потом будет выведена полученная строка.
Если не ставить скобки, то произойдет сложение слева направо, причем каждая переменная x y и z перед сложением сначала будет преобразована в строку.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Преобразование типов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]