-
java是强类型语言,有些需要运算的时候要用到类型转换。常量、字符串是可以混合运算。比如char,他本质上还是一个数字所以 byte,short,char ->int ->long->float->double本质上都可以进行加减乘除的运算。但是运算中,不同类型的数据要先转化为同一类型的数据然后再进行运算。
-
我们把 i 转换成b,b不是byte类型所以会报错,我们要加上(byte)进行强转
public class Demo05 {
public static void main(String[] args) {
int i = 128 ;
byte b = (byte)i;
System.out.println(i);
System.out.println(b);
}
}
- 可以看到b变成了-128,因为他最大值是127,这个地方会有个内存溢出的问题,值不知道会变成什么样子。所以转换的时候尽量避免内存溢出的情况。
- 还有一个叫自动类型转,刚才强制类型转换是从高到低。那么从低到高就是自动转换的。像下面 int 转成double就没有任何问题。
int i = 128; double b = i;
- 布尔值不可以进行转换。
- 不能把对象类型转换为不相干的类型
- 把大容量转低容量用强制转换,低容量转大容量的时候回自动转,不用管它。
- 转换的时候可能存在内存溢出,或精度问题
System.out.println((int)23.7); System.out.println((int)-45.89f);
- char的a字符对应unicode编码加上1是98
char c = 'a'; int d = c+1; System.out.println(d);
- 再将这个d强转为char
System.out.println((char)d);
- jdk 7有一个新特性,数字之间可以用下划线分割,而下划线并不会被输出
int money = 10_0000_0000; System.out.println(money);
int years = 20; int total = money * years; System.out.println(total);
- 上面20年乘以money,应该是二百亿,结果输出了负数
- 计算的时候溢出了,那么用long接收有用吗。结果发现还是这个负数。转换没有用,因为他默认是int,所以结果会变成int
long total2 = money * years; System.out.println(total2);
long total3 = money * ((long)years); System.out.println(total3);变量
- 中学学过一元二次方程,方程会写x=2y,x跟y就是一个变量。那么在java中也是这样,变量是可以变化的量,可以用来操作存储在内存中的数据,内存中会有一个空间,变量就指向这个空间的位置
- 把空间划分好不同的变量,要通过一个名字才能找到他,这个就是通过变量名去找。当有了类型和变量名,就可以往空间里面放东西了。比如一个鞋柜,你想放阿迪的鞋子还是耐克的鞋子都可以。
- Java变量时程序中最基本的存储单元,包括变量名,变量类型,还有作用域。
type varName [ =value ] [{,varName[=value]}];
//数据类型 变量名 = 值 :可以使用逗号分隔声明多个变量
- 不建议在一行定义多个变量
- 每个变量都有类型,类型可以使基本类型,也可以是引用类型(String等)
- 变量名必须是合法的标识符
- 变量声明是完整的语句,必须以分号结束



