Илья Подольский,
1. Большинство «мусорных» языков, включая Яву, основаны на модели неизменяемых объектов — копируется не объект, а ссылка на него. Объект нельзя изменить, можно создать новый — так что на эти ссылки не будет брошена тень.
2. Строки-константы строятся изначально при загрузке класса.
К хэш-коду это никакого отношения не имеет.
Чтобы были разные объекты, нужно, разумеется, обходиться без строк-констант. Например, так.
char[] data = { 'H', 'e', 'l', 'l', 'o' };
String str1 = new String(data);
String str2 = new String(data);
И в этом плане интересна обёртка Integer.
int val = 5;
Integer obj1 = Integer.valueOf(val);
Integer obj2 = Integer.valueOf(val);
System.out.println(obj1 == obj2);
Для небольших значений val сама виртуальная машина наперёд заводит объекты Integer — потому один и тот же объект. Большие числа не попадают в этот пул, делается простой new — объекты не равны.
Илья Подольский, Чтобы определить, одна и та же, проверь str1==str2. В Яве это проверка, один это объект или разные. Для сверки по значению используется str1.equals(str2).
hint000, Программа по-чёрному используется в корпоративной среде.
На данный момент она сохраняет во временный файл, потом старый удаляет и новый переименовывает.
Кто-то ругается, что права доступа к файлу сбрасываются на дефолтные. Не удивительно: исходный файл-то удаляется.
John Smith, Как поступить, если у нас есть файл длиной 45.678.901 байт и ещё 54 мегабайта на диске — какой вообще алгоритм определения? (Да, вот такой порядок размера файлов.)
Для двоичных и просто огромных файлов системы версионирования отказывают.
Ночная архивация тоже хорошее дело — правда, получаем вчерашнюю копию.
А при любом глюке хранилища получаем программу с аварией (хорошо, если не с вылетом) и кусок файла, что равносильно отсутствию файла.
Евгений Шатунов, Самопроверки — хорошее дело, и я их устраиваю. Но поскольку код на стыке прикладного, ОС и Qt, сложно такие самопроверки наладить. Даже стектрейс в точке вылета не дал НИ ОДНОЙ нашей функции, кроме main().
Евгений Шатунов,
1. Случилась ошибка в любой сложной подсистеме — в данном случае в событиях Qt, некоторые из которых возбуждаются из сторонних потоков. Эту подсистему надо отлаживать, накидывая отладочного кода.
2. Вот мы отладили, что дальше делать?
3. Хотелось бы это дело сделать больше через Си++, чем через макросы.
by_EL, Где и когда происходит сравнение?
Чтобы проверить корректность сообщения, надо вычислить имитовставку самому и сравнить с имеющейся в сообщении.
Яков Е, Есть тень. Следующий вопрос. Какой брать исходный архетип окна?
Window, SplashScreen, Dialog, Sheet, Drawer — при появлении окна получается довольно некрасивое мигание, когда основное окно теряет фокус.
Tool — окно предназначено для того, чтобы сидеть наверху и не отсвечивать, но для него в принципе понятия «фокус» нет.
Tooltip — вылезает поверх других программ.