先说一下变量声明的格式:类型 标识符 赋值符号 常量值(eg:int a = 3) 注意: java语言中局部变量未赋初值之前不允许使用(局部变量是在方法块里的,方法块是在内存方法区里的,方法区的内存是跟着方法一起开辟的,如果不赋初值则它不会占内存,所以不能用)如果局部变量未赋初值使用,则编辑时会报错,但全局(成员)变量未赋值之前可以使用,默认为0 局部变量必须在声明后使用,而成员变量可声明在任何位置
举几个栗子:
byte b = ‘c’; //正确,ASCII表中一个字符代表一个数字,这就相当于放的是c在ASCII中对应的数字,这样的写法只对byte类型生效,其他类型就不行。为什么long型数字后面要加个L?(long a = 123L;) 注意:所有的数字赋值之前默认是int型。
short a= 123; //short占两字节,它的最大值不会超过int的最大值。 short b = 35536 //但如果此处赋的值大于short的最大值,会报错(这个报错是在将35536放入b时报错)。(往int里可以放下,但往short里放不下) long c1 = 6; //此时不会报错,因为6未超过int的最大值,肯定也不会超过long的最值 long c2 = 6666666666666; //这里赋的值显然已经超过了int的最大值,所以它在未赋值之前就已经报错了。(往int里放已经就放不下了) long c3 = 6666666666666L; //此时就正确了。①long d1 = 1;② long d2 = 1L; ②比①编译的快,因为②直接把1放到了long型里,而①还要转换一次。
++、+=不会改变变量本身的数据类型
byte b = 127; b = b+1; //编译不通过超出范围,会有损失 byte b = 127; b++;/b+=1; //编译能通过,结果b未=为-128底层解释:
b = b+1; 此时b+1变为了int型,再把int型的b赋回给btye型是不可能的
b++/b += 1; 在此内存上+1,内存不变,为1000 0000为-128
注意: =+是赋值号;+=/++是一个运算符,不换内存,在原内存上自增,溢出,符号位变为1。
应用层解释:
注意:
System.out.println(3/0);//报错 System.out.println(3.0/0.0);//输出:Infinity 表示无限的,因为这里的0.0并不表示0,而可能是0.000000000001char(占两个字节):具体占用的字节数跟编码方式有关,Unicode占4个字节,utf-8占3个字节。
char a1 = 'a'; //任意一个字符需要加单引号 char a2 = '我'; char a3 = 111; //整数 范围是0~65535,十进制、八进制、十六进制都可以。输出为字符编码表中对应的字符 char c = 'a'+'b'; //char类型相加,转为int型,输出字符编码表中对应的字符 char c = 'a' + 1; //转为int型,输出b(98) char m = '中'+'国'; //输出42282 int a = '中'+'国'+'国'+'国'; //输出86820 char s = '中'+"国" //报错,String型不能转换为char型boolean(占4个字节(变字节量)):java使用c语言写的,c语言里没有boolean型,用大于0或者小于0来表示真假,所以是int型,占4个字节。但在做Boolean类型的数组时会做数据压缩,所以boolean型数组的false或frue占1字节。