String能够说成Java中应用頻率最大的类,即便是刚触碰Java的新手也会较为了解,由于针对Java程序流程而言,主方式应用一个String二维数组做为主要参数(String[] args)。

针对那样一个常常采用的类,字符串数组能够有多久?10万字符?一百万个标识符?或是无尽的?

要掌握String的最大的长短,大家应当最先掌握String类的內部完成。在字符串数组类中,字符数组用以维护保养标识符编码序列,其申明如下所示:

private final char value[];

换句话说,字符串数组的最大的长短在于字符数组的最大的长短。我们知道在特定数组长度时能够应用byte,short,char和int,可是不可以应用long。换句话说,二维数组的最大的长短是int类型的最高值,即0x7fffffff,十进制数值2147483647。一样,这也是String能够容下的较大字符数。

除此之外,使我们看一下java.lang.String#length()的源码:

public int length() { return value.length;}

能够见到,获得String目标长短的length方式的传参是int类型,而不是long种类,也是这一缘故。

殊不知,这一最高值只有在理论上完成。在人们的具体应用中,获得的最大的长短一般低于标准偏差。使我们撰写非常简单的程序流程一起来看看。

/** * @author wupx * @date 2020/01/13 */public class StringTest { public static void main(String[] args) { char[] c = new char[Integer.MAX_VALUE]; }}

运作此程序流程,在正常的状况下,会造成下列不正确:

Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limitat test.StringTest.main(StringTest.java:9)

发生此问题的因素是内存溢出,即系统软件没法在空中间分派这般很多的运行内存。经测算,一个字符种类占有2字节数,2147483647字符种类为4294967294字节数,贴近4GB。假如你要申请办理那么一大块的持续运行内存空,你能不成功,这并不怪异。

因此归根结底大家用的电脑上能承担是多少字符数组,跟许多原因相关,例如手机软件和硬件配置。我们可以程序编写来得到能够办理的较大字符数组的自然数。

/** * @author wupx * @date 2020/01/13 */public class StringTest { public static void main(String[] args) { for (int i = 0; i < 100; i ) { int len = Integer.MAX_VALUE - i; try { char[] ch = new char[len]; System.out.println("len: " len " OK"); } catch (Error e) { System.out.println("len: " len " " e); } } }}

运作效果如下所示:

len: 2147483647 java.lang.OutOfMemoryError: Requested array size exceeds VM limitlen: 2147483646 java.lang.OutOfMemoryError: Requested array size exceeds VM limitlen: 2147483645 OKlen: 2147483644 OKlen: 2147483643 OK

从运作結果能够看得出,String的最大的长短为integer . max _ value–2或2 ^ 31–3。

引言

在字符串数组类中,字符数组(char[])用以维护保养标识符编码序列。

String的最大的长短也是字符数组的最大的长短,理论上的最大的长短是int类型的最高值,即2147483647。

事实上,一般可以用的最高值低于基础理论最高值,在我的电子计算机上得到的最小值是2 ^ 31–3,因而您能够在自身的电子计算机上完成检测。

评论(0条)

刀客源码 游客评论