类型转换
- 强制类型转换:(类名)变量名 高容量到低容量
- 自动类型转换:低容量到高容量,自动转换
public class Demo1 {
public static void main(String[] args) {
//类型转换
/*
强制类型转换:(类名)变量名 高容量到低容量
自动类型转换:低容量到高容量,自动转换
* */
int i=128;
byte b=(byte)i;//int->byte 高容量到低容量,强制转换
System.out.println(i);
System.out.println(b);//Byte类 -128~127;内存溢出
/*注:
1.布尔值不能进行强制转换
2.不能将对象类型转换为不相干的类型 boolean i=128(×)
3.高容量转换到低容量时,需进行强制类型转换
4.转换过程中可能出现内存溢出(line 12)和精度问题(line 20)。
* */
System.out.println("-----------------");
System.out.println((int)20.5);
System.out.println((int)-25.6f);
System.out.println("-----------------");
char a='a';
int a1=a+1;//char到int,自动转换
System.out.println(a);
System.out.println(a1);
System.out.println((char)a1);
}
}
结果如下:
128
-128
-----------------
20
-25
-----------------
a
98
b
int 到 long转换
public class Demo2 {
public static void main(String[] args) {
int money=10_0000_0000;//10亿;数字之间可以用下划线分割,jdk7新特性,不影响结果
int year=20;
int total=money*year;
System.out.println(total);//内存溢出
System.out.println((long) total);//依然内存溢出
System.out.println(money*(long)year);//先把一个数转换为long类型,显示正确结果
System.out.println((long)money*year);//显示正确结果
}
}
结果如下:
-1474836480
-1474836480
20000000000
20000000000
变量、常量、作用域
1.类变量:需要关键字static,在类中定义
2.实例变量:从属对象(类),如果不自行初始化,这个类型的默认值为0(int),0.0(浮点型),u0000(字符型);
布尔型为false;除了基本类型,其他默认值都为空。
3.局部变量:在方法里定义,必须声明和初始化值,作用域:方法内
public class Demo3 {
/*变量:数据类型 变量名 = 值
1.类变量:需要关键字static,在类中定义
2.实例变量:从属对象(类),如果不自行初始化,这个类型的默认值为0(int),0.0(浮点型),u0000(字符型);
布尔型为false;除了基本类型,其他默认值都为空。
3.局部变量:在方法里定义,必须声明和初始化值,作用域:方法内
常量:final 数据类型 常量名=值 大写
* */
//常量
static final double PI=3.14;//数据类型前都为修饰符,不分先后
//类变量
static double salary=2500;//自动转换
//实例变量
String name;
int age=21;
public static void main(String[] args) {
int i=10;//局部变量
//在main方法中引入实例变量
//数据类型 变量名=new Demo3()
Demo3 demo3=new Demo3();
System.out.println(demo3.age);
System.out.println(demo3.name);
//类变量
System.out.println(salary);//可以直接引用
}
}