Оператор ==
проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals()
проверьте фактическое содержимое строки (значение).
Обратите внимание, что метод .equals()
принадлежит классу Object
(суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.
String s1 = "Stack Overflow";
String s2 = "Stack Overflow";
s1 == s2; //true
s1.equals(s2); //true
Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле. String s1 = new String("Stack Overflow");
String s2 = new String("Stack Overflow");
s1 == s2; //false
s1.equals(s2); //true
Причина. Если вы создаете объект String с использованием ключевого слова new
, ему выделяется отдельное пространство в куче. Выход правильный. Тип timestamp with time zone
немного вводит в заблуждение, и поведение отличается от, например, в Oracle.
Для отметки времени с часовым поясом внутренне сохраненное значение всегда находится в формате UTC (Universal Coordinated Time, традиционно называемом Среднее время по Гринвичу, GMT). Входное значение, которое имеет указанный явный часовой пояс, преобразуется в UTC с использованием соответствующего смещения для этого часового пояса.
Вход
'2018-06-13 04:11:46.873 -07:00'::timestamptz
преобразуется в соответствующее значение UTC в зависимости от времени заданное смещение зоны. Значение затем преобразуется в часовой пояс вашего сеанса и отправляется клиенту, что затем приводит к2018-06-13 11:11:46.873+00
в часовом поясе вашей сессии.