StringBuffer str=new StringBuffer(); StringBuffer str1=new StringBuffer(3); System.out.println(str.capacity()); //16 System.out.println(str1.capacity()); //8为什么str1.capacity的结果是8?
认证高级PHP讲师
Anda mungkin telah membuat kesilapan, output sepatutnya:
16 3
Lihat kod sumber:
// minimumCapacity是当前已经存储的字符长度+要追加的字符长度 // value.length 是当前容量 // 所以新容量=max(2*旧容量+2,追加后的字符长度) void expandCapacity(int minimumCapacity) { int newCapacity = value.length * 2 + 2; if (newCapacity - minimumCapacity < 0) newCapacity = minimumCapacity; if (newCapacity < 0) { if (minimumCapacity < 0) // overflow throw new OutOfMemoryError(); newCapacity = Integer.MAX_VALUE; } value = Arrays.copyOf(value, newCapacity); }
Kapasiti hanya akan dikembangkan apabila menambah Semasa pemulaan, sebagai tambahan kepada lalai 16, ia boleh ditetapkan kepada sebarang nombor.
给你看JDK 1.8中的构造方法: StringBuffer的两个构造方法,继承自父类的构造方法AbstractStringBuilder: public StringBuffer() { super(16); } public StringBuffer(int capacity) { super(capacity); } AbstractStringBuilder的构造方法: AbstractStringBuilder(int capacity) { value = new char[capacity]; }
Jalankan di sini untuk melihat kompilasi dan pelaksanaan dalam talian Java: Persekitaran berjalan: java v1.7.0_80
Anda mungkin telah membuat kesilapan, output sepatutnya:
Lihat kod sumber:
Kapasiti hanya akan dikembangkan apabila menambah Semasa pemulaan, sebagai tambahan kepada lalai 16, ia boleh ditetapkan kepada sebarang nombor.
Jalankan di sini untuk melihat kompilasi dan pelaksanaan dalam talian Java: Persekitaran berjalan: java v1.7.0_80