栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在SQL中使用StringBuilder的正确方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在SQL中使用StringBuilder的正确方法

使用StringBuilder的目的是减少内存。完成了吗?

一点都不。该代码未

StringBuilder
正确使用。(不过,我认为您的报价有误;
id2
和的周围肯定没有引号
table
吗?)

请注意,通常的目的是减少内存 流失, 而不是减少使用的总内存,以使垃圾收集器的工作更轻松。

这样占用的内存等于使用如下所示的String吗?

不,这将导致 更多的
内存流失,而不仅仅是您引用的直接连接。(除非/除非JVM优化器认为

StringBuilder
代码中的显式内容是不必要的,否则将其优化)。

如果该代码的作者想要使用

StringBuilder
(有参数支持,但也有反对;请参见此答案末尾的注释),则最好做得好(在此我假设
id2
和之间实际上没有引号
table
):

StringBuilder sb = new StringBuilder(some_appropriate_size);sb.append("select id1, ");sb.append(id2);sb.append(" from ");sb.append(table);return sb.toString();

请注意,我已经

some_appropriate_size
StringBuilder
构造函数中列出了它,以便它以足够的容量开始要添加的全部内容。如果未指定一个字符,则使用的默认大小为16个字符,通常太小,导致
StringBuilder
必须进行重新分配以使其自身变大(IIRC,在Sun
/ Oracle JDK中,它会自身加倍[或更多,如果它知道
append
每次用完房间都需要更多满足特定条件。

您可能听说过,如果使用Sun / Oracle编译器进行编译,则字符串连接

StringBuilder
在幕后使用。的确如此,它将
StringBuilder
为整体表达使用一个。但是它将使用默认构造函数,这意味着在大多数情况下,它将不得不进行重新分配。不过,它更容易阅读。请注意,这对于
一系列 串联 不是 正确的。因此,例如,它使用一个: __
StringBuilder

return "prefix " + variable1 + " middle " + variable2 + " end";

它大致翻译为:

StringBuilder tmp = new StringBuilder(); // Using default 16 character sizetmp.append("prefix ");tmp.append(variable1);tmp.append(" middle ");tmp.append(variable2);tmp.append(" end");return tmp.toString();

所以没关系,虽然默认的构造函数和随后的重新分配(S)不理想,赔率是它不够好-以及级联是一个 很大 的可读性。

但这仅适用于单个表达式。

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;

…这很丑。

但是要记住,重要的是,在几乎所有情况下, 这都无关紧要 ,除非有特定的性能问题, 否则最好选择 可读性(增强可维护性)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437483.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号