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 ''
Eclipse デバッガーで ARGS[0] の値を見ると、スラッシュがエスケープされていることがわかります。なぜこれが起こるのですか?予想するのはちょっと難しいと思います。