StringBuilder,非线程安全的,避免作为类变量存储信息。
//1.
StringBuilder sb_1=new StringBuilder(); //内部的字符数组长度默认为16
sb_1.append("0123456789"); //此时内部的字符数组的长度仍然是16 , 未利用空间为6
sb_1.append("abcdef");//此时内部的字符数组的长度仍然是16, 未利用空间为0
sb_1.append("N");//此时内部的字符数组的长度是34,34=(16+1)*2 , 未利用空间为17
sb_1.append("0123456789abcdefN1");//此时内部的字符数组的长度是70,70=(34+1)*2,未利用空间为35
//2.
StringBuilder sb_2=new StringBuilder("0123456789");//内部的字符数组长度=构造器内参数.length()+16,这里为26, 未利用空间为16
sb_2.append("abcdef"); //此时内部的字符数组长度未变,为26, 未利用空间为10
sb_2.append("N");//此时内部的字符数组长度仍然是26, 未利用空间为9
sb_2.append("0123456789abcdefN1");//此时内部的字符数组的长度是54,54=(26+1)*2,未利用空间为19
/**
* 第一种方式,再追加长度为35的字符串时,内部的字符数组长度不变,仍为70,未利用空间为0.
* 第二种方式,再追加长度为35的字符串时,内部的字符数组长度变为110,未利用空间为40.
*
* 第一种方式,继续追加长度为1的字符串时,内部的字符数组长度变为142,未利用空间为71.
* 第二种方式,继续追加长度为1的字符串时,内部的字符数组长度变为110,未利用空间为39.
*
* 未利用空间对比如下:
* 6<-->16, 0<-->10, 17<-->9, 35<-->19, 0<-->40, 19<-->39
* 前者比上后者,小于0.5的可能性较大,大于2的可能性较小。
* 没有采用多次随机的方式演练,但是:
* 在拼接更长的字符串时,且目标字符串长度未知的情况下,
* 若采用第二种方式,内部的字符数组长度的递增速度更快. 可能会浪费更多的空间.
* 所以建议使用new StringBuilder();
* (win32, jdk5)
*/
分享到:
相关推荐
StringBuilder类是Java编程语言中用于处理字符串的一个重要工具,尤其在需要进行大量字符串操作或者需要优化性能的场景下,StringBuilder扮演着不可或缺的角色。与String不同,String对象的长度是固定的,一旦创建,...
StringBuilder sb=new StringBuilder();//用StringBuilder动态生成信息 sb.append(getResources().getText(R.string.ys)); sb.append(":"); sb.append(tvn.getText()); tv.setText(sb.toString());//信息...
构造StringBuilder以避免分配生成器本身 从ThreadStatic或ArrayPool租用写入缓冲区 所有的append方法都是泛型的( Append(T value) )并直接写入缓冲区而不是连接value.ToString T1 〜 T16 AppendFormat( ...
StringBuilder sb=new StringBuilder(); sb.append(tvn.getText());//获取姓名信息 sb.append(" "); sb.append(tvnL.getText());//获取描述信息 tv.setText(sb.toString());//信息设置进主界面...
StringBuilder response = new StringBuilder(); while ((output = br.readLine()) != null) { response.append(output); } br.close(); System.out.println(response.toString()); ``` 这段代码创建了一个连接到...
StringBuilder keyBuilder = new StringBuilder(); for (Object arg : args) { keyBuilder.append(arg).append(','); } return keyBuilder.toString(); } } ``` 最后,我们通过`Proxy.newProxyInstance()`...
method.Invoke(instance, new object[] { arg1, arg2 }); ``` 4. **访问属性**:`PropertyInfo`类用于访问和修改属性值。 ```csharp PropertyInfo prop = myType.GetProperty("MyProperty"); object value = prop....
public static StringBuilder append(StringBuilder sb, String[] arg) { sb.append(arg[0]); for (int i = 1, len = arg.length; i ; i++) { sb.append(","); sb.append(arg[i]); } return sb; } ``` ##### ...
StringBuilder sb = new StringBuilder(); XmlTextWriter xw = new XmlTextWriter(new StringWriter(sb)); xw.WriteStartElement("invoke"); xw.WriteAttributeString("name", Fname); xw.WriteAttributeString...
StringBuilder sb = new StringBuilder(); for (String dir : pathStack) { sb.append(dir); if (dir != pathStack.get(pathStack.size() - 1)) { sb.append("/"); } } return sb.toString(); } public ...
StringBuilder builder = new StringBuilder(); for (int i = 0; i ; i++) { builder.append("a"); } String str = builder.toString(); ``` 在上面的例子中,我们使用 StringBuilder 来创建字符串,然后使用 ...
StringBuilder result = new StringBuilder(); for (String s : strings) { result.append(s); } return result.toString(); } public static void main(String[] args) { System.out.println(concatenate(...
StringBuilder strBuf = new StringBuilder(""); lTime = System.currentTimeMillis(); for (int i = 0; i ; ++i) strBuf.append(String.valueOf(i)); System.out.println("Buffered String:" + (System....
StringBuilder sb = new StringBuilder(methodName); for (Object arg : args) { sb.append("-").append(arg.toString()); } return sb.toString(); } } ``` #### 四、配置Spring AOP 为了使上面的拦截器...
2. `insert(int offset, arg)`方法:允许在指定的偏移量位置插入内容。在例子中,`b.insert(5, "World!")`将在索引5的位置插入"World!",结果是"HelloWorld!"。 3. `delete(int start, int end)`方法:用于删除指定...
StringBuilder sb = new StringBuilder(); sb.Append("Hello "); sb.Append("World!"); string result = sb.ToString(); ``` ### 23. 显式与隐式转换 - **隐式转换**:自动进行,无需显式转换。 - **显式转换**:...
StringBuilder keyBuilder = new StringBuilder(cacheResult.cacheName()); keyBuilder.append(':').append(joinPoint.getSignature().getName()); // 添加参数到键值,例如通过ToStringBuilder for (Object arg...
字符串类型需要特殊处理,LPSTR、LPCSTR、LPWSTR、LPCWSTR等统一定义为string或StringBuilder,可以通过CharSet字段区分,或者在定义时使用MarshalAs定义。 ```csharp [ MarshalAs(UnmanagedType.LPTStr)] string ...
typeof(DllType).InvokeMember("DllFunction", BindingFlags.InvokeMethod, null, dllInstance, new object[] { arg1, arg2 }); ``` 在这个例子中,我们首先加载DLL,然后获取类类型,接着创建类的实例,并调用DLL...