powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по инициализации класса
18 сообщений из 18, страница 1 из 1
Вопрос по инициализации класса
    #39231814
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что выведет следующая программа?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class A{
 
static int a = 1111;
static
{
        a = a-- - --a;
}
    
{
        a = a++ + ++a;
}
 
 public static void main(String[] args)  {
       System.out.println(a);
    }
}



ps. Что такое
Код: java
1.
2.
3.
{
        a = a++ + ++a;
}


?
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231825
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenps. Что такое
Код: java
1.
2.
3.
{
        a = a++ + ++a;
}



? Initializing Fields (см. Initializing Instance Members)
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231826
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ворпос из одной статьи по Java ( https://tproger.ru/translations/10-tricky-core-java-interview-coding/). Приведу еще один вопрос оттуда:

Что выведет код и почему?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
package com.instanceofjava;
 
public class A{ 
 public static void main(String[] args)  {
   Integer i1 = 128;
   Integer i2 = 128;
   System.out.println(i1 == i2);
 
   Integer i3 = 127;
   Integer i4 = 127;
   System.out.println(i3 == i4);
 }
}
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231828
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть предположение, что тут что то завязано на тип byte, так как получаются разные результаты при значениях [128+) и (-127).
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231829
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. больше 128 включительно, и меньше 127.
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231831
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,

faustgreen
Код: java
1.
2.
3.
Integer i1 = 128;
   Integer i2 = 128;
   System.out.println(i1 == i2);

Это уже два разных объекта, поэтому ссылки (адреса объектов в памяти) на них не равны.

Но:
faustgreen
Код: java
1.
2.
3.
int i1 = 128;
   int i2 = 128;
   System.out.println(i1 == i2); // будет TRUE

Будет true, т.к. это уже примитивы (сравнение по значеням, а не по ссылкам (адресам))

Для объектов Integer предусмотрен кэш, который хранит значения от -128 до 127 (диапазон по умолчанию):IntegerCache/**
* Cache to support the object identity semantics of autoboxing for values between
* -128 and 127 (inclusive) as required by JLS.
*
* The cache is initialized on first usage. The size of the cache
* may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
* During VM initialization, java.lang.Integer.IntegerCache.high property
* may be set and saved in the private system properties in the
* sun.misc.VM class.
*/
В первом случае, значение не находится в кэше и создается новый объект, ссылки которых уже не равны.
Во-втором - объекты берутся из кэша, обе переменные указывают на один и тот же объект, соот-но TRUE
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231834
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman, спасибо за ответы! Все доходчиво и понятно!
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231839
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне вот интересно. В реале кто-нибудь пишет код в таком вот виде, как в первом сообщении? Если да - то как его кастрируют? Ржавыми ножницами, или бензопилой?
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231841
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

Все зависит от Team Lead'а
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231843
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenUsman, спасибо за ответы! Все доходчиво и понятно!
хитрый вопрос на тему боксинга. Интеджер вроде бы и не примитив, но зато с ним можно делать i1+i2 и оно даже будет работать.
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231844
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTхитрый вопрос на тему боксинга.+127

faustgreen,

Значения по ссылке нужно сравнивать при помощи equals :
Код: java
1.
2.
3.
Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1.equals(i2)); // тогда будет true
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231847
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автормне вот интересно. В реале кто-нибудь пишет код в таком вот виде, как в первом сообщении? Если да - то как его кастрируют? Ржавыми ножницами, или бензопилой?
Если я все правильно понял нестатическая инициализация может пригодится когда класс имеет множество конструкторов, часть кода которых дублируется - ее и выносим в этот блок.
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231848
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen
Код: java
1.
a = a-- - --a;

Можно переписать так:
Код: java
1.
a = a - ((a - 1) - 1);
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231849
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanandreykaTхитрый вопрос на тему боксинга.+127

faustgreen,

Значения по ссылке нужно сравнивать при помощи equals :
Код: java
1.
2.
3.
Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1.equals(i2)); // тогда будет true



Да, про это я знаю, получается что для примитивов применяем == (и только для них?), для всего остального equals.
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231851
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenДа, про это я знаю, получается что для примитивов применяем == (и только для них?), для всего остального equals.Для сравнения значений:
- примитивов - только == ,
- ссылочных типов (String, Integer, ...) - equals() .
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39231854
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
некоторые выкабениваются и строки сравнивают ==, когда знают. Вернее, думают, что знают, что строки в одном стрингпуле находятся. В любом случае, то, что сверху по моему скромному мнению это брэйнфак стайл код, и ему в реальном проекте не место. Разумеется, если цель проекта чтоб код был логичный и удобочитаемый, а не понты программиста-школьника. Сугубо имхо.
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39232437
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen
Код: java
1.
2.
3.
4.
5.
6.
7.
   Integer i1 = 128;
   Integer i2 = 128;
   System.out.println(i1 == i2);
 
   Integer i3 = 127;
   Integer i4 = 127;
   System.out.println(i3 == i4);


Все зависит от поведения Integer.valueOf управляется -XX:AutoBoxCacheMax или java.lang.Integer.IntegerCache.high (в HotSpot)
...
Рейтинг: 0 / 0
Вопрос по инициализации класса
    #39232440
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTнекоторые выкабениваются и строки сравнивают ==, когда знают.
Ну если знаешь ( intern ), то почему бы и нет?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по инициализации класса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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