3、类型转换
byte(1字节) < short(2字节) 、 char(2字节)< int(4字节)< long(8字节)< float(4字节)< double(8字节)
浮点数优先级更高
1、强制转换
按照上面顺序从大类型的转成小的类型
int i = 128; byte b = (byte)i;
2、自动转换
从小的类型自动转换成大的类型
int i = 128;
double d = i;
3、注意点:
-
不能对布尔值进行转换
-
不能把对象类型转换成不相干的类型
-
在高容量转换成低容量的时候,强制转换
-
转换的时候可能存在内存溢出,精度丢失
-
jdk7以后的新特性,数字中间可以加下划线_,不会影响数字大小
-
当数字进行运算时,结果会造成溢出,应先进行类型转换,再进行运算
-
在转换成long类型时,数字后面加大写L,不建议使用小写l
public class Demo02 { public static void main(String[] args) { int i = 128; byte b = (byte)i;//大转小,强制转换 System.out.println(b);//内存溢出,-128 double d = i;//小转大,自动转换 System.out.println(d);// int i2 = 10_0000_0000; System.out.println(i2);//1000000000 int i3 = 20; // int sum = i2*i3;//-1474836480 // long sum = i2*i3;//-1474836480 long sum = i2*(long)i3;//20000000000 long i4 = 20L; System.out.println(sum); } }
4、变量、常量
1、变量
-
可以变化的量
-
java是一种强类型语言,每一个变量都必须声明其类
-
java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域
int i = 128;//类型 变量名 = 值; String name = "小芳";
-
每个变量都有类型,可以是基本数据类型,也可以是引用类型
-
变量名必须是合法的标识符
-
变量声明是一条完整的语句,因此每声明一个都必须以分号结束
变量作用域
-
类变量:方法外,类类里面,static关键字
-
局部变量:存在方法里面,必须声明和初始化值
-
实例变量:类里面,方法外面,从属于对象,如果没有初始化,会存在这个类型的默认值
public class Demo03 { //类变量:static关键字,没有static方法里面无法使用 static double salary = 2500; //实例变量 int i; String name; public static void main(String[] args) { //局部变量 int a = 30; String b = "雨水"; System.out.println(a); System.out.println(b); // System.out.println(i);//不可以直接拿到i //拿到实例变量 Demo03 demo03 = new Demo03(); System.out.println(demo03.i);//默认值 0 System.out.println(demo03.name);//默认值 null //拿到类变量 System.out.println(salary); demo03.add(); } public void add(){ // System.out.println(a);//拿不到main()方法里面的局部变量 // System.out.println(b); System.out.println(salary);//可以使用类变量 System.out.println(i); System.out.println(name); } }
2、常量(Constant)
-
初始化(initialize)之后不能改变值!不会变动的值
-
可以理解成一种特殊的变量,它的值被设定之后,在程序运行的过程中不允许被改变
-
常量名一般使用大写字符
-
使用final修饰符进行定义常量
修饰符不存在先后顺序
3、变量的命名规范
5、运算符
自增、自减
public class Demo { public static void main(String[] args) { //++,-- 一元运算符,自增,自减 int a = 5; int b = a++;//++在后,是先赋值,后进行自增 b = 5 //相当于这里多了一行:a = a + 1; System.out.println(a);//a = 6 //相当于这里多了一行:a = a + 1;a = 7 int c = ++a;//++ 在前,是先自增,后赋值,c = 7; System.out.println(a); System.out.println(b); System.out.println(c); //幂运算 2^3 2*2*2 = 8 很多运算,我们需要使用工具类进行处理 double pow = Math.pow(2, 3); System.out.println(pow); } }
位运算符
-
面试题:2*8 怎么计算才会最快?
public class Demo04 { public static void main(String[] args) { /* 位运算符:&、|、^、~ A = 0010 0110 B = 1100 0101 A&B = 0000 0100 &:对位两个都为1,结果对位才为1,其余为0 A|B = 1110 0111 |:对位两个都为0,结果对位才为0,其余为1 A^B = 1110 0011 ^:对位两个相同则结果对位为0,其余为1 ~B = 0011 1010 ~:取反,0取1,1取0 2*8 怎么样计算才最快? 2*2*2*2 <<(左移)相当于 *2 右边表示乘的次数 10<<3 = 10*2*2*2 >>(右移)相当于 /2 右边表示除的次数 10>>2 = 10/2/2 0000 0000 0 0000 0001 1 0000 0010 2 0000 0011 3 0000 0100 4 0000 1000 8 0001 0000 16 */ System.out.println(2<<3);//16 } }