我试图了解String
在编程过程中使用它是否有用,我们小组中普遍认为使用String
是不好的做法并且enum
是可行的方法,但我无法找到足够的理由投反对票String
并且不胜感激关于这个问题的想法和例子?
更新:
我应该将我的问题重新表述为在什么情况下使用String
是邪恶的,以及dataType
你应该使用什么替代方法。
String
是有用的,也是表示文本数据的最佳方式。不应使用字符串来表示:
enum
)。例如 no "cm"
, "mm"
,"km"
作为单位。对这些元素使用Unit
枚举。Unit.cm
, ETC。int
,double
等)Date
,Calendar
或 joda-time DateTime
)char[]
改为使用,因为 JVM 对字符串的处理方式不同,并且攻击者可能会访问敏感信息。byte[]
,则不应使用 anew String(bytes)
来传输它 - 您可以通过这种方式丢失信息。字符串可以表示二进制内容,如果它被编码 - 在 Base64、Hex 等中。如果你问是否
...
public enum Settings {
FAST,SLOW,PRECISE
}
...
if(setting == Settings.FAST) {
...
}
好于
...
if("FAST".equals(setting)) {
...
}
...
那么答案是肯定的,枚举更好,因为您可以与 == 而不是 .equals() 进行比较,这可能会使可执行文件更快并且更容易编写,而且您可以使用 switch where 字符串值你不能,并且使用 enum如果您检查的是字符串值而不是枚举标志,您可以利用像 NetBeans 或 Eclipse 这样的优秀 IDE 来帮助您避免通过 IDE 和编译器的拼写错误。
java.lang.String
不是邪恶的。事实上,它可能是 java 中最常用的类(免责声明:我没有数据支持它)。但是,有一些注意事项:
将密码收集并存储在 java.lang.String 类型的对象中似乎是合乎逻辑的。但是,需要注意的是:String 类型的对象是不可变的,即没有定义允许您在使用后更改(覆盖)或清零 String 内容的方法。此功能使 String 对象不适合存储用户密码等安全敏感信息。您应该始终将安全敏感信息收集并存储在 char 数组中。
-- http://docs.oracle.com/javase/1.4.2/docs/guide/security/jce/JCERefGuide.html#PBEEx
连接字符串时,您可能应该使用StringBuilder
since java.lang.String
is immutable 并且为每个连接制作新副本。
当存在更专业的类时,例如枚举、数字、日期等,比字符串更喜欢它。
使用的一个不幸方面String
是,在 JDK 7 之前,它不能在switch...case
语句中工作。您必须(如果String
为此目的使用 s)if...else if...else
改为使用。并且您必须使用.equals()
而不是进行测试==
,并且在某些情况下您可能希望使用.equalsIgnoreCase()
替代。所有这些都使我更喜欢enum
这种String
情况。
这取决于。出乎意料并假设此列表并不详尽。
优点:
Java SE 7:String - String 类是不可变的,因此可以共享字符串(这也意味着线程安全)。
Java 中的字符串池- 字符串被池化,因此在重用它们时很有效。
+
缺点:用于多个字符串时,Concat 操作效率不高。最好使用 a StringBuilder
or a StringBuffer
(thread-safe) or Ropes
. 看到这个:IBM:绳索
字符串本身并不邪恶。
我认为当你使用它作为你的主要抽象时,伤害就来了。您可以在代码中看到它,其中有许多明显相关但分散在整个代码中的原语(例如字符串、整数、数组、数据结构)。
在这些情况下,更好的解决方案是将一起属于的数据项封装到一个可感知的对象中。