java – String,String Builders,Character Arrays和Arraylist之
字符串是不可变的. Stringbuilders不是,所以你可以在最后添加字符.字符串是字符数组,如果我没有错,比为什么我们单独使用字符数组和字符串分开,我们真的需要使用字符数组吗?
其次,有字符数组,然后有Arraylists.数组列表包含完整的对象?实际上我有点困惑. String cat = "c" + "a" + "t"; cat = cat + cat; StringBuilder sb = new StringBuilder(); sb.append(city); sb.append(","); sb.append(state); sb.toString(); Char apple[5]={'a','p','l','e'}; Arraylist<MyCar>obj = new Arraylist<MyCar>(); 哪个应该用在哪里? 解决方法
这解释了最好:在string和stringBuilder之间
编号: Correct way to use StringBuilder 请注意,目标(通常)是减少内存流失而不是使用的总内存,以使垃圾收集器的生活更轻松. Will that take memory equal to using String like below? 不,它会导致更多的内存流失,而不仅仅是你所引用的直接连接. (直到/除非JVM优化器发现代码中的显式StringBuilder是不必要的并且优化它,如果可以的话.) 如果该代码的作者想要使用StringBuilder(有参数,但也有反对;请参阅本答案末尾的注释),最好是正确地做(这里我假设实际上并没有围绕id2和表): StringBuilder sb = new StringBuilder(some_appropriate_size); sb.append("select id1,"); sb.append(id2); sb.append(" from "); sb.append(table); return sb.toString(); 请注意,我在StringBuilder构造函数中列出了some_appropriate_size,因此它开始时有足够的容量来容纳我们要追加的完整内容.如果不指定一个字符,则使用的默认大小为16个字符,这通常太小而导致StringBuilder必须进行重新分配以使其自身更大(IIRC,在Sun / Oracle JDK中,它自身加倍[或更多,如果它知道它需要更多来满足特定的追加]每次它用完了房间). 您可能听说过,如果使用Sun / Oracle编译器编译,字符串连接将使用StringBuilder.这是事实,它将使用一个StringBuilder作为整体表达式.但它将使用默认构造函数,这意味着在大多数情况下,它将不得不进行重新分配.不过,它更容易阅读.请注意,对于一系列连接,情况并非如此.例如,这使用一个StringBuilder: return“prefix”variable1“middle”variable2“end”; 它大致翻译为: StringBuilder tmp = new StringBuilder(); // Using default 16 character size tmp.append("prefix "); tmp.append(variable1); tmp.append(" middle "); tmp.append(variable2); tmp.append(" end"); return tmp.toString(); 所以没关系,虽然默认构造函数和后续的重新分配并不理想,但它的可能性足够大 – 并且连接更具可读性. 但这仅适用于单一表达.多个StringBuilder用于此: String s; s = "prefix "; s += variable1; s += " middle "; s += variable2; s += " end"; return s; 最终变成这样的事情: String s; StringBuilder tmp; s = "prefix "; tmp = new StringBuilder(); tmp.append(s); tmp.append(variable1); s = tmp.toString(); tmp = new StringBuilder(); tmp.append(s); tmp.append(" middle "); s = tmp.toString(); tmp = new StringBuilder(); tmp.append(s); tmp.append(variable2); s = tmp.toString(); tmp = new StringBuilder(); tmp.append(s); tmp.append(" end"); s = tmp.toString(); return s; ……这很丑陋. 但重要的是要记住,在极少数情况下,除了特定性能问题之外,在所有情况下都无关紧要,并且具有可读性(增强可维护性)是首选. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |