Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “什么是”呢;“串击”;为什么不好?_Java_String - Fatal编程技术网

Java “什么是”呢;“串击”;为什么不好?

Java “什么是”呢;“串击”;为什么不好?,java,string,Java,String,我的老板一直使用“字符串攻击”(我们是一家Java商店)这个术语,每当我问他任何问题时,他通常会拿我举例(好像我应该已经知道了)。我在谷歌上搜索了这个术语,却发现了与理论物理和弦论有关的结果 我猜这与不正确地使用String/StringBuilders或不符合最佳实践有关,但就我个人而言,我不知道这是什么。你为什么不问问你的老板一个打击String的例子呢。 别忘了问他重构他给你的例子的正确方法。猜测:这可能意味着与创建不必要的临时对象有关,在这种情况下是字符串。例如,如果您正在逐个令牌构造字

我的老板一直使用“字符串攻击”(我们是一家Java商店)这个术语,每当我问他任何问题时,他通常会拿我举例(好像我应该已经知道了)。我在谷歌上搜索了这个术语,却发现了与理论物理和弦论有关的结果


我猜这与不正确地使用String/StringBuilders或不符合最佳实践有关,但就我个人而言,我不知道这是什么。

你为什么不问问你的老板一个打击String的例子呢。
别忘了问他重构他给你的例子的正确方法。

猜测:这可能意味着与创建不必要的临时对象有关,在这种情况下是字符串。例如,如果您正在逐个令牌构造字符串令牌,那么使用StringBuilder通常是一个好主意。如果字符串不是使用构建器构建的,则每次连接都会导致创建另一个临时对象(以及稍后的垃圾收集)

在现代虚拟机(我认为是热点1.5或1.6)中,这很少是一个问题,除非您使用的是性能关键型代码,或者您正在构建长字符串,例如for循环

只是猜测;最好问问他或她是什么意思?我以前从未听过这个词。

“字符串攻击”是一个俚语,用于切割字符串并对其进行操作:拆分、连接、插入、标记化、解析等


这并不是天生的坏事(尽管有“bashing”的含义),但正如您所指出的,在Java中,当StringBuilder效率更高时,您需要小心不要使用字符串。

在google上有一些结果在这方面提到了字符串bashing。他们似乎并没有提到对低效的临时程序和使用StringBuilder的担忧

相反,它似乎指的是过于简单的字符串解析。也就是说,做一些事情,比如检查子字符串、切片字符串等。特别是,这似乎意味着这是一个黑客解决问题的方法

这可能会让人感觉很糟糕,因为您应该使用真正的解析或以非字符串格式获取数据。

断章取义,“字符串攻击”本身并没有任何意义。这不是用来形容任何好的或坏的行为的流行语。它只意味着“重击字符串”,就像使用字符串操作一样

这是好是坏取决于你在做什么,而字符串的作用其实并不重要。处理任何类型的数据都有好的和坏的方法


有时“猛击字符串”实际上是最好的解决方案。例如,您想选择字符串的前三个字符。您可以创建一个分隔字符的正则表达式,但这肯定是过火了,因为有一个简单的字符串操作可以做到这一点,它更快、更易于维护。

高效Java有一个关于使用字符串的项目:“项目50:避免使用其他类型更合适的字符串”。也在stackoverflow上:“”

StringBuilder's:tt在循环中是值得的。如果您的代码只执行S=A+B+C+D,那么编译器将非常聪明并自动使用StringBuilder。如果您有一个串联的循环,那么编译器就不会那么聪明了。是的,只是在关于for循环的部分中编辑过。我意识到我最初的回答有点模糊/无力。