import org.junit.Test; public class TestInit { boolean boo; char cha; byte by; short shor; int in; float flo; long lon; double dou; String str; @Test public void aa() { System.err.println("boolean:" + boo); if (cha == ‘\u0000‘) { System.err.println("char:" + (int) cha); System.err.println(cha); } System.err.println("byte:" + by); System.err.println("short:" + shor); System.err.println("int:" + in); System.err.println("long:" + lon); System.err.println("float:" + flo); System.err.println("double:" + dou); System.err.println("String:" + str); } }
以上为测试程序,输出结果为:
boolean:false char:0 byte:0 short:0 int:0 long:0 float:0.0 double:0.0 String:null
结论:
布尔值: boolean默认false
字符: char,
整数:byte,short,int,long为0
实数: float,double为double类型的0.0
对象引用为null
补充:
(1)、new方式创建对象保存到堆中,保存其地址的引用,对于基本数据类型来说,java采取和c、c++相同方式,创建的变量直接存储值,置于栈顶,更加高效。
(2)、Java中每种基本数据类型所占存储空间大小,不依赖于机器硬件架构变化而变化,即基本数据类型所占存储空间具有不变性。
(3)、所有数值类型都有正负号,没有无符号的数值类型
各个基本数据类型的大小及精度如下表:
基本类型 | 大小 | 最小值 | 最大值 | 包装类型 |
boolean | -- | -- | -- | Boolean |
char | 16bit,2个字节(byte) | Unicode 0 | Unicode 2^16-1即,65535 | Character |
byte | 8bit,1个字节 | -128 | 127 | Byte |
short | 16bit,2个字节 | -2^15即32768 | +2^15-1,即32767 | Short |
int | 32bit,4个字节 | -2^31即2147483648,约-21亿 | +2^31-1,即2147483647,约约+21亿 | Integer |
long | 64bit,8个字节 | -2^63即9223372036854775808,约-922亿亿 | +2^63即9223372036854775807,约+922亿亿 | Long |
float | 32bit,4个字节 | 1.4E-45,即1.4*(1/10^45) | 3.4028235E38,即3.4028235*10^38 | Float |
double | 64bit,8个字节 | 4.9E-324,即4.9*(1/10*324) | 1.7976931348623157E308即1.7976931348623157*10^308 | Double |
表说明:1)、boolean类型所占存储空间大小没有明确指定,仅仅定义能够取字面值true,false
2)、各个数值类型的最大值,最小值,均可通过包装类型的MIN_VALUE与MAX_VALUE获取,如Double.MIN_VALUE。
3)、jdk1.5后提供自动装拆箱机制,基本数据类型和包装类型自动转换。
4)、表格中按照从上到下精度由低到高(boolean除外),从高精度到低精度需显示强制转换(boolean除外)。
附加:高精度数字
BigInteger:支持任意精度的额整数,可以表示任何大小整数值,而不会丢失信息。
BigDecimal:支持任何精度的定点数,如可以进行精确的货币运算。
高精度数字缺点:运算速度比较慢,以速度换取精度。