java基础常量表 一个字符串类型的值能储存最大容量是多少啊?

[更新]
·
·
分类:互联网
2215 阅读

java基础常量表

一个字符串类型的值能储存最大容量是多少啊?

一个字符串类型的值能储存最大容量是多少啊?

呃,可以看源码,而且情况很多,string的实现数组最大的长度当然是_VALUE,但是,Java在常量池中有一个变体utf8表,该表有个字段最大是65535,null占用两个字节,所以,当string中放的是字母,源码中有个判断(<65535),也就是能放65534个字母,但是如果是汉字等,判断条件是(<=65535),也就是能放65535个汉字,当然,上面的情况都是在编译期,如果是在运行期的话,最大的长度就是_VALUE了,也就是将近4g,这基本上是不可能有的了,最长的string场景应该是序列化类吧,撑死几千。

从语言上来看,是个接口,其下有N多实现,最常用的是ArrayList和LinkedList及其各种继承或同步化实现(如Vector/Queue/Stack这些的)
ArrayList内部是拿数组存储,那么上限就是_VALUE
LinkedList内部是个链表,理论上是无限的
另外,List里放的东西都是在内存里的(当然你也可以自己实现一个放磁盘上的),因此能放多少也取决于放的东西的大小以及种类。
大小方面很容易计算,一个对象如果1K,那400,000个就至少要占用400M的内存(不算其他占用)。
而虚拟机内存分类方面,如果是普通对象,一般占用的都是堆(Heap)空间,如果是常量或是类似()出来的东东,则占用的是永生带(Permanent Generation)。

java 1.8常量池会被gc吗?

被final或者static声明的常量不会被gc函数回收,程序运行就一直存在于堆栈中。其余的一些类的变量,在运行时被创建,在必要时会被回收

实型常量如何判断是否合法?

1. 八进制常数:开头必须是0,八进制是介于0和7之间的数字。例如,029是错误的八进制表示。
2. 十六进制常量:以0 x开头,包含字母ABCDEF,不区分大小写。例如,像0x和0x一样,0xaa和0xaa是正确的。
3. 实常数:必须有小数点。例如,定义double a1是错误的,必须写成double a1.0。此外,将a1写为0中间的逗号也是错误的。