Ставьте лайк и читайте еще раз, Java продвинута более чем наполовину
Вы должны были использовать тернарный оператор раньше,Есть такая проблема на зарубежных форумах:Ternary operator: bad or good practice
?тернарный оператор:Плохая привычка или хорошая привычка?
Наибольшее количество голосов получил ответ от парня по имени Тед Дзюба.
Для удобства чтения я использую тройку только в том случае, если она умещается в строке из 80 символов.
For the sake of readability, I only use a ternary if it fits into one 80-char line.
Привет всем, я брат Нэн.
Будучи лидером в изучении и продвижении Java, я считаю, что вам будет полезно пройти собеседование и получить предложение о работе в той компании, которую вы хотите.
⭐⭐Эта статья включена в《JavaРасширенное руководство по обучению》:https://github.com。。
Все содержание этой статьи очень часто встречается в вопросах письменного экзамена по оценке предприятий, и в них могут быть ошибки. Обратите внимание.!
Ребята, вы заметили это, когда играли в Java?,Объект, подобный следующему,Даже если мы не присваиваем значение переменной,После создания эта переменная по-прежнему будет иметьзначение по умолчанию。
class A {
int a;
}
System.out.println(new A().a);
Результат выполнения программы:
0
Иногда студенты, изучающие фронтенд, просят серверную часть дать значение по умолчанию 0, и нам даже не нужно этого делать, компилятор Java выполнит всю работу.
На самом деле это особенность языка Java. Например, переменные, то есть переменные-члены, если они являются базовыми типами данных, будут иметь значение по умолчанию. Различные базовые типы имеют разные значения по умолчанию. Давайте рассмотрим значения по умолчанию различных базовых типов ниже.
int a; //0
short b; //0
long c; //0
float d; //0.0
double e; //0.0
boolean f; //false
byte g; //0
char h; //нулевой символ
(1) байт в Java、short、charПри выполнении математических расчетовпродвигатьдляintтип,Базовые знания, которые легко упустить из виду,Брат Нэн медленно сказал.
Правильно ли работает следующий код?
byte b1 = 1, b2 = 2, b3;
b3 = b1 + b2;
Ответ такой, как вы и ожидали, то есть ошибка компиляции.
# Содержимое ошибки
java: Несовместимые типы: Могут быть потери при преобразовании из int в byte
Поскольку во время математических вычислений byte, short и char будут преобразованы в тип int, нам необходимо преобразовать результат в тип byte во время операции. Правильный подход заключается в следующем.
b3 = (byte)(b1 + b2);
(2) Но если байтовая переменная записана таким образом, мы добавляем Final и к b1, и к b2. Удивительно, что во время компиляции не будет сообщено об ошибке.
final byte b1 = 1, b2 = 2, b3;
b3 = b1 + b2;
Эта ситуация является особым случаем и специально обрабатывается компилятором Java. Мы называем это оценкой константных выражений во время компиляции. b1, b2 и b3 — постоянные значения. b3 будет назначен компилятором на этапе компиляции. Он не будет включать в себя упомянутые выше математические вычисления и будет преобразован в тип int, поэтому ошибок компиляции не будет.
(3) А что, если это так?
final byte b1 = 1; byte b2 = 2, b3;
b3 = b1 + b2;
Вышеупомянутые две байтовые переменные,Есть только одна финальная модификация,То естьОперация присвоения b3Невозможно сделать во время компиляции,Тогда этот код все равно сообщит об ошибке,Нам все еще нужно преобразовать результат в байтовый тип.
Правильный подход заключается в следующем.
b3 = (byte)(b1 + b2);
Диапазон данных типа байта составляет -128 ~ 127. Когда это значение превышает 127, оно преобразуется в - 128. Почему?
byte i = 127;
System.out.println(++i);
Результат выполнения программы:
-128
byteтип的最大值127在二进制中表示для01111111
,Когда мы добавляем 1 к значению 127,Добавление 1 к каждому биту приведет к переносу,В результате все биты перевернутся.(от01111111
становиться10000000
),и10000000
Десятичное представление-128。
Чаще всего в бизнес-разработке пишут условные операторы, особенно для старых проектов эпохи итераций, с одним набором операторов if за другим.
Теперь, когда мы увидели так много условных операторов, каков результат выполнения следующего кода?
Boolean flag = false;
if (flag = true) {
System.out.println("true");
}
else {
System.out.println("false");
}
В Java условное суждение имеет функцию присваивания, и оператор try также имеет ее. В это время фальгу присваивается значение в условном суждении.
Результат выполнения программы:
true
Я считаю, что многие южнокорейские друзья сталкивались с ловушками тернарного оператора. . . Давайте разберемся, что такое тернарный оператор?
Тернарный оператор в Java — это краткий инструмент для создания условных выражений. Его синтаксический формат: выражение 1 : выражение 2.
если
состояние
для真(true),Тогда результат выражения будетВыражение 1
;еслидля假(false),РезультатВыражение 2
。
Если это так, брат Нэн спросил: Каков окончательный тип данных o1?
Object o1 = true ? new Integer(1) : new Double(2.0);
Приведенная выше строка кода фактически эквивалентна этой строке.
Object o1 = true ? new Double(1.0) : new Double(2.0);
Очень важной деталью тернарного оператора является унификация типов. Диапазон данных типа Double больше, чем у типа Interger.,такJava编译器会对值тип进行типпродвигать,Наконец, тип Integer преобразуется в тип Double.
下面是Брат Нэн编写的两个i++
Самовозрастающие проблемы, подверженные ошибкам,Оценки на собеседовании часто появляются в вопросах письменного экзамена.
(1) Первый вопрос брата Нана: каков результат выполнения следующего кода?
int i = 0;
i = i++ + i;
Результат выполнения программы:
1
(2) Второй вопрос брата Нана: каков результат выполнения следующего кода?
int i = 0;
i = i++;
System.out.println(i);
Результат выполнения программы:
0
Когда мы создаем объект String, JVM на самом деле выполняет большую часть работы за кулисами. Объекты String могут существовать в пуле констант и куче памяти. Разберем конкретные вопросы подробнее.
(1)Следующий фрагмент кодаНе включеноссылочный тип,Просто чистыйБуквальное сращивание,Таким образом, в пуле констант будет создан только один объект.
String s = "JavaProGuide" + «Брат Нэн» + 666;
(2)Следующий фрагмент кодаВключатьПонятноссылочный тип,Всего создано 3 объекта.,Вы правильно догадались?
String s = "Hello";
s = s + " world!"
"Hello"、" world!"Все принадлежатбуквальный,Поэтому они будут добавлены в пул строковых констант Java.
иs + " world!"
这么一个代码段涉及Понятноссылочный тип,Таким образом, он создает в памяти новый объект Строковый.,не существует в постоянном пуле,Вместо этого он существует в куче памяти.
(3) Следующий фрагмент кода создает в общей сложности два объекта, которые существуют в пуле констант и куче памяти соответственно.
Сначала новый объект поместит объект String в память кучи, и во время этого процесса он сначала проверит, существует ли пул констант. JavaProGuide
String str = new String("JavaProGuide");
добро пожаловатьсосредоточиться на Брат Нэн的公众号:Расширенный компас Java。公众号里有Брат Нэн珍藏整理的大量优秀pdfкниги!
Я Брат Нэн, Нэн — это Нэн. Я нашла ваши интересные комментарии на Get➕Like➕Follow.
Творить непросто, поэтому вы можете ставить лайки, собирать и подписываться, чтобы поддержать его. Ваша поддержка — самая большая мотивация для моего творчества.❤️