Java中的字符串转义符 "\\"

Java中的字符串转义符 "\\"
下面的单元测试能够通过,这可能不符合直觉。
	@Test
	public void passed() {
		String a = "\\";
		assertFalse(a.length() == 2);
		assertTrue(a.length() == 1);
		
		String b = "\\\\";
		assertTrue(b.length() == 2);
		
	}


原因在于"\"在这里被JVM解释为转义符,所以如果当你需要一个"\",在Java里面同时需要为JVM提供一个"\"用于转义,这样你就得到了一个字符"\\"。

进一步的可以做一个小实验,在用户UI中输入字符"\abc",调试模式用该字符初始化的Java变量其实是"\\abc",当你把这个字符输出到文件或者保存到数据库中时,我们看到的是"\abc".

给定一个表达式:
foobar~='^.*a[b-f]g.*$',
我们不想让其中正则表达式生效(本意是想让诸如mvel这样的语言解释器,将[b-f]按照字面意义上去读入),这样的话,前面表达式如果存在数据库中,似乎是这样:
foobar ~='^.*a\\[b-f\\]g.*$'

进一步的,在Java代码中将表达式赋值给一个变量,看起来应该是这个样子
 String expression = "foobar~='^.*a\\\\[b-f\\\\]g.*$'";