当前位置:   article > 正文

JDK源码学习与分析之StringBuilder

JDK源码学习与分析之StringBuilder

        本文基于JDK1.8学习与分析StringBuilder源码

public final class StringBuilder extends AbstractStringBuilder implements Serializable, CharSequence

        StringBuilder是一个可变的字符序列。 此类提供与StringBuffer的API,相较于StringBuffer,StringBuilder不保证同步,所以不能安全使用多线程。但在非多线程的场景,性能略高于StringBuffer。读者可根据实际场景选择使用。

        基于JDK源码,笔者列出StringBuilder每个方法,希望与各位一起阅读、学习:

  1. package java.lang;
  2. import java.io.IOException;
  3. import java.io.ObjectInputStream;
  4. import java.io.ObjectOutputStream;
  5. import java.io.Serializable;
  6. import java.io.StreamCorruptedException;
  7. public final class StringBuilder extends AbstractStringBuilder implements Serializable, CharSequence {
  8. static final long serialVersionUID = 4383685877147921099L;
  9. public StringBuilder() {
  10. super(16);
  11. }
  12. public StringBuilder(int var1) {
  13. super(var1);
  14. }
  15. public StringBuilder(String var1) {
  16. super(var1.length() + 16);
  17. this.append(var1);
  18. }
  19. public StringBuilder(CharSequence var1) {
  20. this(var1.length() + 16);
  21. this.append(var1);
  22. }
  23. public StringBuilder append(Object var1) {
  24. return this.append(String.valueOf(var1));
  25. }
  26. public StringBuilder append(String var1) {
  27. super.append(var1);
  28. return this;
  29. }
  30. public StringBuilder append(StringBuffer var1) {
  31. super.append(var1);
  32. return this;
  33. }
  34. public StringBuilder append(CharSequence var1) {
  35. super.append(var1);
  36. return this;
  37. }
  38. public StringBuilder append(CharSequence var1, int var2, int var3) {
  39. super.append(var1, var2, var3);
  40. return this;
  41. }
  42. public StringBuilder append(char[] var1) {
  43. super.append(var1);
  44. return this;
  45. }
  46. public StringBuilder append(char[] var1, int var2, int var3) {
  47. super.append(var1, var2, var3);
  48. return this;
  49. }
  50. public StringBuilder append(boolean var1) {
  51. super.append(var1);
  52. return this;
  53. }
  54. public StringBuilder append(char var1) {
  55. super.append(var1);
  56. return this;
  57. }
  58. public StringBuilder append(int var1) {
  59. super.append(var1);
  60. return this;
  61. }
  62. public StringBuilder append(long var1) {
  63. super.append(var1);
  64. return this;
  65. }
  66. public StringBuilder append(float var1) {
  67. super.append(var1);
  68. return this;
  69. }
  70. public StringBuilder append(double var1) {
  71. super.append(var1);
  72. return this;
  73. }
  74. public StringBuilder appendCodePoint(int var1) {
  75. super.appendCodePoint(var1);
  76. return this;
  77. }
  78. public StringBuilder delete(int var1, int var2) {
  79. super.delete(var1, var2);
  80. return this;
  81. }
  82. public StringBuilder deleteCharAt(int var1) {
  83. super.deleteCharAt(var1);
  84. return this;
  85. }
  86. public StringBuilder replace(int var1, int var2, String var3) {
  87. super.replace(var1, var2, var3);
  88. return this;
  89. }
  90. public StringBuilder insert(int var1, char[] var2, int var3, int var4) {
  91. super.insert(var1, var2, var3, var4);
  92. return this;
  93. }
  94. public StringBuilder insert(int var1, Object var2) {
  95. super.insert(var1, var2);
  96. return this;
  97. }
  98. public StringBuilder insert(int var1, String var2) {
  99. super.insert(var1, var2);
  100. return this;
  101. }
  102. public StringBuilder insert(int var1, char[] var2) {
  103. super.insert(var1, var2);
  104. return this;
  105. }
  106. public StringBuilder insert(int var1, CharSequence var2) {
  107. super.insert(var1, var2);
  108. return this;
  109. }
  110. public StringBuilder insert(int var1, CharSequence var2, int var3, int var4) {
  111. super.insert(var1, var2, var3, var4);
  112. return this;
  113. }
  114. public StringBuilder insert(int var1, boolean var2) {
  115. super.insert(var1, var2);
  116. return this;
  117. }
  118. public StringBuilder insert(int var1, char var2) {
  119. super.insert(var1, var2);
  120. return this;
  121. }
  122. public StringBuilder insert(int var1, int var2) {
  123. super.insert(var1, var2);
  124. return this;
  125. }
  126. public StringBuilder insert(int var1, long var2) {
  127. super.insert(var1, var2);
  128. return this;
  129. }
  130. public StringBuilder insert(int var1, float var2) {
  131. super.insert(var1, var2);
  132. return this;
  133. }
  134. public StringBuilder insert(int var1, double var2) {
  135. super.insert(var1, var2);
  136. return this;
  137. }
  138. public int indexOf(String var1) {
  139. return super.indexOf(var1);
  140. }
  141. public int indexOf(String var1, int var2) {
  142. return super.indexOf(var1, var2);
  143. }
  144. public int lastIndexOf(String var1) {
  145. return super.lastIndexOf(var1);
  146. }
  147. public int lastIndexOf(String var1, int var2) {
  148. return super.lastIndexOf(var1, var2);
  149. }
  150. public StringBuilder reverse() {
  151. super.reverse();
  152. return this;
  153. }
  154. public String toString() {
  155. return new String(this.value, 0, this.count);
  156. }
  157. private void writeObject(ObjectOutputStream var1) throws IOException {
  158. var1.defaultWriteObject();
  159. var1.writeInt(this.count);
  160. var1.writeObject(this.value);
  161. }
  162. private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  163. var1.defaultReadObject();
  164. int var2 = var1.readInt();
  165. char[] var3 = (char[])((char[])var1.readObject());
  166. if (var2 >= 0 && var2 <= var3.length) {
  167. this.count = var2;
  168. this.value = var3;
  169. } else {
  170. throw new StreamCorruptedException("count value invalid");
  171. }
  172. }
  173. }

        StringBuilder各方法的基本使用测试和StringBuffer基本相同,不再赘余演示,读者可以参考StringBuffer的示例,也可基于API自行测试。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/1020273
推荐阅读
相关标签
  

闽ICP备14008679号