string myString = @"sadasd/asdaljsdl";
然而,在Java中没有相应的东西。Java为什么没有包含类似的内容呢?
编辑:
经过查看一些答案并思考,我真正想问的是:
是否有任何强有力的理由反对将此语法添加到Java中?有什么负面影响,我没有意识到吗?
string myString = @"sadasd/asdaljsdl";
然而,在Java中没有相应的东西。Java为什么没有包含类似的内容呢?
编辑:
经过查看一些答案并思考,我真正想问的是:
是否有任何强有力的理由反对将此语法添加到Java中?有什么负面影响,我没有意识到吗?
我认为Java一直是一种极简主义语言 - 我想,由于文本字符串不是必需品(例如属性),所以它们没有被包含在内。
例如,在C#中有许多快速的方法来处理属性:
public int Foo { get; set; }
和逐字字符串:
String bar = @"some
string";
Java倾向于尽可能避免语法糖。如果您想要为一个字段获取器和设置器,您必须这样做:
private int foo;
public int getFoo() { return this.foo; }
public int setFoo(int foo) { this.foo = foo; }
字符串必须进行转义:
String bar = "some\nstring";
我认为这是因为C#和Java在很多方面有不同的设计目标。C#快速发展,不断添加许多特性,但大多数特性往往只是语法糖。另一方面,Java则注重简单和易于理解。Java最初的创建原因之一就是对C++语法复杂性的反应。
我觉得“为什么”问题很有趣。C#是一种较新的语言,试图改进其他语言(如Java)中被认为存在的缺点。而“为什么”问题的简单原因是:Java标准没有像C#中那样定义@运算符。
Java(不幸的是)没有这样的东西,但Groovy有:
assert '''hello,
world''' == 'hello,\nworld'
//triple-quotes for multi-line strings, adds '\n' regardless of host system
assert 'hello, \
world' == 'hello, world' //backslash joins lines within string
我曾经做过一些.NET工作,非常喜欢C#的这个特性。它对于剪切和粘贴SQL查询尤其有帮助。
我不确定为什么,但你可以通过转义转义字符来实现。由于所有的转义字符都是以反斜杠开头的,因此插入双反斜杠就可以有效地取消转义字符。例如,"\now"将产生一个换行符,然后是字母"ow",但"\now"将产生"\now"。
你应该找到你的IDE为你处理这个问题。 如果你正在一个字符串中间,复制粘贴原始文本进去,它应该会为你转义文本。
PERL有更多种设置字符串字面量的方式,有时候希望Java也支持这些方式。 ;)