Почему так получается, что аргумент командной строки, передаваемый классу Java, кажется автоматически экранированным, тогда как в экземпляре объекта String escape-символ (), по-видимому, игнорируется.
Например, если начать сСтрока, подобная этой:
SELECT * FROM my_table WHERE my_col like 'ABC_\' ESCAPE '\'
И я пытаюсь запустить его через простой класс, подобный этому:
public class EscapeTest {
public static void main (String[] args) {
String str = "SELECT * FROM my_table WHERE "
+ "my_col like 'ABC_\' ESCAPE '\'";
System.out.println("ARGS[0]: "+args[0]);
System.out.println("STR: "+str);
}
}
, и я передаю приведенный выше оператор "SELECT" в качестве аргумента командной строки,Я получаю вывод, который выглядит следующим образом:
ARGS[0]: SELECT * FROM my_table WHERE my_col like 'ABC_\' ESCAPE '\'
STR: SELECT * FROM my_table WHERE my_col like 'ABC_' ESCAPE ''
Если я смотрю на значение ARGS [0] в отладчике Eclipse, я вижу, что косые черты экранированы.Почему это происходит?Я думаю, что это довольно сложно предсказать.