要纠正编译错误,请替换为以下char[] 语句之一
String s = "MY PROFESSION";
char c1[] = "MY PROFESSION".toCharArray();
char c2[] = { 'M', 'Y', ' ', 'P', 'R', 'O', 'F', 'E', 'S', 'S', 'I', 'O', 'N' };
StringBuilder sb = new StringBuilder("MY PROFESSION");
StringBuffer sbu = new StringBuffer("MY PROFESSION");
以下部分将上述语句相互比较
字符串常量
String s="MY PROFESSION";
字符数组
char c1[]="MY PROFESSION".toCharArray();
char c2[]={'M', 'Y', ' ', 'P', 'R', 'O', 'F', 'E', 'S', 'S', 'I', 'O', 'N'};
-
c1 持有 String 底层数组的副本(通过 System.arraycopy)并存储在堆空间中
-
c2 通过加载单个字符常量在堆栈帧中动态构建
-
c1 & c2 是可变的,即 Array 的内容可以修改。 c2[0]='B'
- 数组的大小/长度是固定的(不能追加)
StringBuilder / StringBuffer
StringBuilder sb = new StringBuilder("MY PROFESSION");
StringBuffer sbu = new StringBuffer("MY PROFESSION");
-
sb 和 sbu 都是可变的。 sb.replace(0, 1, 'B');
-
sb 和 sbu 都存储在堆中
- 可以修改大小/长度。
sb.append( '!');
-
StringBuffer 的方法是同步的,而 StringBuilder 的方法是不同步的