Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public class Test {
public static void main(String[] args) {
String test = "string0";
switch(test){
case "string0":
System.out.println("It's works!");
break;
}
}
}
import java.io.PrintStream;
public class Test
{
public static void main(String[] paramArrayOfString)
{
String str1 = "string0";
String str2 = str1; int i = -1; switch (str2.hashCode()) { case -1881759169:
if (!str2.equals("string0")) break; i = 0; } switch (i) {
case 0:
System.out.println("It's works!");
}
}
}
Просто по hashCode, видимо, стрёмно — а ВДРУГ найдецца еще строка с таким же hashCode?Что значит «видимо», что значит «вдруг»? Так нельзя делать принципиально алгоритмически, даже странно, что надо о таком говорить. И так не делается никогда. В том числе при реализации любых хеш-таблиц, в том же HashMap ищется сначала по хеш-коду, а потом обязательно делается equals, и почему — должно быть очевидно любому программисту. Тем более, что вероятность коллизий хешкода строки просто огромна.
System.out.println("6R".hashCode());
System.out.println("5q".hashCode());Вывод:1756
1756Вот офигенный бы «свич по хешкоду» получился :)public class Test2 {
public static void main(String[] args) {
String test = "6R";
switch(test){
case "6R":
System.out.println("Ok");
break;
case "5q":
System.out.println("Fail");
break;
}
}
}
import java.io.PrintStream;
public class Test2
{
public static void main(String[] paramArrayOfString)
{
String str1 = "6R";
String str2 = str1; int i = -1; switch (str2.hashCode()) { case 1756:
if (str2.equals("5q")) { i = 1; } else { if (!str2.equals("6R")) break; i = 0; } }
switch (i) {
case 0:
System.out.println("Ok");
break;
case 1:
System.out.println("Fail");
}
}
}switch(test){
case "6R":
case "blabla":
System.out.println("Ok");
break;
case "5q":
...Ну и попробуйте его реализовать, распихивая это по веткам первого свича. Это невозможно ведь, не правда ли?import java.io.PrintStream;
public class Test3
{
public static void main(String[] paramArrayOfString)
{
String str1 = "6R";
String str2 = str1; int i = -1; switch (str2.hashCode()) { case 1756:
if (str2.equals("5q")) { i = 2; } else { if (!str2.equals("6R")) break; i = 0; } break;
case -1386582880:
if (!str2.equals("blabla")) break; i = 1; } switch (i) {
case 0:
case 1:
System.out.println("Ok");
break;
case 2:
System.out.println("Fail");
}
}
}String str2 = str1;
Java SE 7 Released