Защо се случва, че аргумент на командния ред, предаден на Java клас, изглежда автоматично екраниран, докато в инстанциран String обект символът за екраниране () привидно се игнорира.
Например, ако започнете с низ като този:
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, виждам, че наклонените черти са екранирани. Защо това се случва? Мисля, че е доста трудно да се предвиди.