Программисты JAVA общаются здесь
Anonymous
Две одинаковые строки не сравниваются [дубликат]
Сообщение
Anonymous » 25 янв 2025, 12:08
Вообще, почему-то, когда я сравниваю две строки, они почему-то не равны. Очень сложно объяснить, как, на мой взгляд, они все же должны быть равны и первое условие должно выполняться.
Скриншот:
Скриншот
Код (Java):
Код: Выделить всё
import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
String login, password;
// password = scanner.next();
System.out.println("Please enter to System!");
System.out.print("Enter login : ");
login = scanner.next();
System.out.print("Enter password : ");
password = scanner.next();
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] login_hash = digest.digest(login.getBytes(StandardCharsets.UTF_8));
login = bytesToHex(login_hash);
byte[] password_hash = digest.digest(password.getBytes(StandardCharsets.UTF_8));
// System.out.println(bytesToHex(password_hash));
if ((String)login == "96cae35ce8a9b0244178bf28e4966c2ce1b8385723a96a6b838858cdd6ca0a1e") {
System.out.println(login + "\n == \n" + "96cae35ce8a9b0244178bf28e4966c2ce1b8385723a96a6b838858cdd6ca0a1e");
System.out.println("Welcome!");
}
if ((String)login != "96cae35ce8a9b0244178bf28e4966c2ce1b8385723a96a6b838858cdd6ca0a1e") {
System.out.println(login + "\n != \n" + "96cae35ce8a9b0244178bf28e4966c2ce1b8385723a96a6b838858cdd6ca0a1e");
}
}
private static String bytesToHex(byte[] hash) {
StringBuilder hexString = new StringBuilder(2 * hash.length);
for (int i = 0; i < hash.length; i++) {
String hex = Integer.toHexString(0xff & hash[i]);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
}
Я ожидал, что условие, которое будет выполнено первым, попытается преобразовать байт в строку и наоборот.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... t-compared
1737796113
Anonymous
Вообще, почему-то, когда я сравниваю две строки, они почему-то не равны. Очень сложно объяснить, как, на мой взгляд, они все же должны быть равны и первое условие должно выполняться. Скриншот: Скриншот Код (Java): [code]import java.security.MessageDigest; import java.nio.charset.StandardCharsets; import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); String login, password; // password = scanner.next(); System.out.println("Please enter to System!"); System.out.print("Enter login : "); login = scanner.next(); System.out.print("Enter password : "); password = scanner.next(); MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] login_hash = digest.digest(login.getBytes(StandardCharsets.UTF_8)); login = bytesToHex(login_hash); byte[] password_hash = digest.digest(password.getBytes(StandardCharsets.UTF_8)); // System.out.println(bytesToHex(password_hash)); if ((String)login == "96cae35ce8a9b0244178bf28e4966c2ce1b8385723a96a6b838858cdd6ca0a1e") { System.out.println(login + "\n == \n" + "96cae35ce8a9b0244178bf28e4966c2ce1b8385723a96a6b838858cdd6ca0a1e"); System.out.println("Welcome!"); } if ((String)login != "96cae35ce8a9b0244178bf28e4966c2ce1b8385723a96a6b838858cdd6ca0a1e") { System.out.println(login + "\n != \n" + "96cae35ce8a9b0244178bf28e4966c2ce1b8385723a96a6b838858cdd6ca0a1e"); } } private static String bytesToHex(byte[] hash) { StringBuilder hexString = new StringBuilder(2 * hash.length); for (int i = 0; i < hash.length; i++) { String hex = Integer.toHexString(0xff & hash[i]); if (hex.length() == 1) { hexString.append('0'); } hexString.append(hex); } return hexString.toString(); } } [/code] Я ожидал, что условие, которое будет выполнено первым, попытается преобразовать байт в строку и наоборот. Подробнее здесь: [url]https://stackoverflow.com/questions/79386245/two-identical-strings-are-not-compared[/url]