基本数据类型

byte tt=(byte)130  等于 -126 。 byte 占一个字节,8bit 。第一位是符号位,0 表示正数,1 表示负数。因此byte 的取值范围 [-128, 127] 。

130的二进制是00000000000000000000000010000010,截取成byte类型只保留后8位,也就是10000010,第1位是符号位0代表正数、1代表负数,这里第一位是1也就是负数,计算机存储的负数是补码,必须将其他位取反再加1,取反加1后这个为-1111110,这个二进制数转换为整数是-126 。

byte a= (byte) 0x00000111;   十六进制 16*16 + 16 + 1 = 256 + 17 =  0000001  00010001 。截取后8位,则 a = 17 。

byte c = (byte)0xFF;  十六进制 15*16 + 15 = 255 = 11111111 , 最前面1表示负数, 存储的是 补码,后面7位取反 加 1 等于 1 , 则 c = -1 。   System.out.println(c);  输入 -1 。

八进制必须以 0 开头, 十进制不能以0开头(0除外)。

byte a= 00000111;  八进制 64 + 8 + 1 , 则 a = 73 。

byte a= (byte)00001111; 八进制 8*8*8 + 64 + 8 + 1 = 00000010 01001001 , 转换成byte,取后8位,则 a = 73 。   byte a= 00001111 ,会报错超出范围[-128,127] 。

 

byte占 8位。 short 占 16位,取值范围 [-32768, 32767]

short s1 = 1; s1 = s1 + 1; 会报错,因为1是int类型,计算结果是 int类型,需要强制转换成short类型,写成  s1 = (short)(s1 + 1) ;  或者 s1 += 1; 此种写法含有隐式的强制类型转换。 相当于(short)(s1 + 1)  

 

int类型在内存中占32位,4个字节。取值范围 [-2147483648, 2147483647]。

2^31 = 2147483648

 

Integer a = 3;
Integer b = 3;

System.out.println(a == b);   // true 。

 创建b 的时候,会先去已创建的对象里寻找是否有相同的值,有的话就使用地址,由于b的值和a的值是相同的,所以b是直接引用a 。如果 再执行 a = 4 ; 则会另创建一个值为4的对象,并把 a 指向 该对象。但是b 的指向不变。

Integer c = new Integer(3);

Integer d = new Integer(3);

System.out.println(a == c);  //false 。

System.out.println(d == c);  //false 。

另外创建两个 值为 3的对象 c 和 d,和a 不同的地址。

int e = 3;

System.out.println(a == e); //true

a 会自动开箱,并用其值与 e 比较。相等。

System.out.println(d == e);  //true 

 

Integer f = Integer.valueOf(3);

System.out.println(a == f);  //true

Integer.valueOf(3) 返回一个 Integer 的对象,如果之前有此对象,则 f 也指向这个对象。

System.out.println(c == f);  //false 。

System.out.println(e == f); //true, 自动开箱后比较。

 

int a = Integer.parseInt("634");   parseInt() 是 Integer类的静态方法,返回一个 int 的值 。参数必须是字符串。 a =634 。

int r = Integer.parseInt("s"); 会在运行时报错:NumberFormatException 

Integer k = Integer.valueOf("634");   返回值是 634 的Integer 对象。

Integer k = Integer.valueOf("a"); 会在运行时报错:NumberFormatException 

int a = Integer.parseInt("634" , 8); 第二个参数表示进制, 把第一个参数转换成十进制的整数值,比如把 8进制的 634 转化成 6*8*8 + 3*8 + 4 = 412 。

 

 

long型如果赋值超出int型的范围,则需要在数字后加上L或l 。表示该值是长整型。long占64位。

long n = 2147483650L + 4; 则 n 值是 2147483654 。 

long m = (long)(2147483647 + 4);  计算过程:2147483647 存储是: 01111111 11111111 11111111 11111111 加上 00000000 00000000 00000000 00000100 等于 10000000 00000000 00000000 00000011 。

前面的1 表示负数。负数存储的是补码,将其他位取反加 1 。 源码是 11111111 11111111 11111111 11111101 。 则 m 等于 -(2^32-1-2)= -2147483645 。

 

float 占32位。申明float 变量必须在小数后面加F 或 f 。

double占64位。默认小数是 double 。也可以在后面加D 或 d 。

 

posted @ 2016-11-17 23:16  zhoudingzhao  阅读(464)  评论(0编辑  收藏  举报