看完黑马的j2ee课程总结
1.基本数据类型分类(4类8种)
* 整数型* byte 占一个字节 -128到127 8bit
* short 占两个字 -2^15~2^15-1 16bit
* int 占四个字节 -2^31~2^31-1 32bit
* long 占八个字节 -2^63~2^63-1 64bit(long x = 88888888888888888L)末尾加L,否则编译错误,默认为int类型
* 浮点型
* float 占四个字节 -3.403E38~3.403E38 单精度 32bit float f = 12.7F 需要加标识
* double 占八个字节-1.798E308~1.798E308 双精度 64bit 小数默认double类型
* char 占两个字节 0~65535 16bit
* 布尔型
* boolean
* boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小 理论上:1bit
2.使用变量的注意事项
* a:作用域问题
* 同一个区域不能使用相同的变量名
* b:初始化值问题
* 局部变量在使用之前必须赋值 (若不使用,可以不赋值,编译运行都不会报错)
* c:一条语句可以定义几个变量
* int a,b,c...;
3.Java中的默认转换规则
* 取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算
例如 int x =3; byte b = 4; x = x + b;
* 进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的
* byte,short,char -- int -- long -- float -- double
float 和 long
float 4个字节 32个二进制位 1位符号位,8位指数位,23位尾数位
A:它们底层的存储结构不同。
B:float表示的数据范围比long的范围要大
4.数据类型转换之强制转换
例:* b = (byte)(a + b); 必须加强制转换,否则编译错误
* 如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同
例:byte b = (byte)(126+4); 可以编译并运行,输出 -126
5.变量相加和常量相加的区别
* byte b1 = 3;
* byte b2 = 4;
* byte b3 = b1 + b2; 编译错误
* 从两方面去回答这个题
* b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值
* byte类型的变量在进行运算的时候,会自动类型提升为int类型
* byte b4 = 3 + 4;
* 3和4都是常量,java有常量优化机制,就是在编译的的时候直接把3和4的结果赋值给b4了
6.字符和字符串参与运算
System.out.println('a'); a
System.out.println('a'+1); 98
System.out.println((char)('a'+1)); b
System.out.println("hello"+'a'+1); helloa1 任何数据类型用+与字符串相连接都会产生新的字符串
System.out.println('a'+1+"hello"); 98hello
System.out.println("5+5="+5+5); 5+5= 55
System.out.println("5+5="+(5+5)); 5+5= 10
System.out.println(5+5+"=5+5"); 10=5+5
7.算术运算符的基本用法
* a:+号在java中有三种作用,代表正号,做加法运算,字符串的连接符
* b:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
* c:/获取的是除法操作的商,%获取的是除法操作的余数
* %运算符
* 当左边的绝对值小于右边绝对值时,结果是左边
* 当左边的绝对值等于右边或是右边的倍数时,结果是0
* 当左边的绝对值大于右边绝对值时,结果是余数
* %运算符结果的符号只和左边有关系,与右边无关
* 任何一个正整数%2结果不是0就是1可以用来当作切换条件
10/3 3 10/3.0 3.33333333
-13 % -5 -3 13%-5 3
* A:++,--运算符的作用
* 自加(++)自减(--)运算
* ++:自加。对原有的数据进行+1
* --: 自减。对原有的数据进行-1
* B:案例演示
* a:单独使用:
* 放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
* b:参与运算使用:
* 放在操作数的前面,先自增或者自减,然后再参与运算。
* 放在操作数的后面,先参与运算,再自增或者自减。
int a = 10;
int b = 10;
int c = 10;
a = b++; a = 10 b = 11
c = --a; a = 9 c =9
b = ++a; a = 10 b = 10
a = c--; a = 9 c = 8
int x = 4;
int y = (x++)+(++x)+(x*10); y = 4 + 6 + 60 = 70 x = 6
面试题
* byte b = 10;
* b++; 默认强转 b = (byte) (b + 1)
* b = b + 1;
* 问哪句会报错,为什么 第三句,++是一个运算符,
赋值运算符
int a =3;
a += 4; a = a + 4
+= 把左边和右边做加法,然后赋值给左边。
short s=1;s = s+1; 编译错误
short s=1;s+=1; 正确 默认强转
8.包装类
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
String和int类型的相互转换
public static void main(String[] args) {
/**
* int --- String
*/
int i = 100;
String s1 = i + ""; //推荐用
String s2 = String.valueOf(i); //推荐用
String s3 = Integer.toString(i);
System.out.println(s3.getClass().getName());
/**
* String --- int
*/
String s = "123";
Integer i0 = new Integer(s);
int i1 = i0.intValue();
int i2 = Integer.parseInt(s);
System.out.println(i2); //推荐用
}
基本数据类型包装类有八种,其中七种都有pase xx 的方法,可以将这七种字符串表现形式转换成基本数据类型
char的包装类Character中没有parse xx的方法,字符串到字符转换通过 toCharArray()
* 自动装箱:把基本类型转换为包装类类型
* 自动拆箱:把包装类类型转换为基本类型
面试题
public static void main(String[] args) {
Integer i1 = new Integer(97);
Integer i2 = new Integer(97);
System.out.println(i1 == i2); //false
System.out.println(i1.equals(i2)); //true
System.out.println("-----------");
Integer i3 = new Integer(197);
Integer i4 = new Integer(197);
System.out.println(i3 == i4); //false
System.out.println(i3.equals(i4)); //true
System.out.println("-----------");
Integer i5 = 97;
Integer i6 = 97;
System.out.println(i5 == i6); //true
System.out.println(i5.equals(i6)); //true
System.out.println("-----------");
Integer i7 = 197;
Integer i8 = 197;
System.out.println(i7 == i8); //false
System.out.println(i7.equals(i8)); //true
}
-128到127是byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取,如果超过了byte的取值范围就会再新创建对象(源码)