java中整数型字面值被默认当做int型来处理。
如果要这个整数型字面值被当做long类型来处理的话,需要在整数型字面值
后面添加l或L(建议大写)

整数型字面值有三种表示方式

十进制(默认)
八进制 (需要以0开始)
十六进制(需要以0x开始)

int a=10;    输出10
int b=010;   输出8
int c=0x10;  输出16

默认的输出也是以十进制输出的

int i =123  //i是int类型,123也默认是int类型,之间赋值不存在类型转换

long x=456  //x是long类型(大容量),456是int类型(小容量),存在类型转换
小容量可以自动转换为大容量,称为`自动转换机制

java看到数字就会自动认为是int`类型,占用4个字节,那么后面的数字就不能够超过int类型的最大(127)

long z=12345565 就不行,因为12345565超出了int的范围


	long z=12345565L,直接把12345565认为是Long类型就可以
大容量不能直接赋值给小容量,需要强制类型转换
需要`强制类型转换符`
==可能损时精度==

long x=100L;

int y =x;  在编译上就不能实现 

int y=(int)x; 编译可以通过

源数据long x 100L 二进制形式是
00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100 (8字节,64位)
转换后数据 int y 二进制是
00000000 00000000 00000000 01100100 (4字节,32位)

long k =2147483648L; (int最大只到2^31-1是2147483647 ,超过了这个范围就会有精度损失)
int e =(int)k;
System.out.println(e);  结果是-2147483648(是-2^31)

源数据是 00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000
强制转换后的数据是 10000000 00000000 00000000 00000000 存在计算机里是一个补码形式,把这个补码转换为源码就是最终结果

(就已经占用到符号位了)

大容量到小容量

但只要数字没有超过byte范围就可以不加强制转换符(仅限byte、short,char类型) byte b=(byte)50; byte是1字节,8位,最大到127这里的‘(byte)’其实加不加都可以
byte c=127 ;也对
byte d=128; 不行128超过了byte的范围

大容量到小容量,如果超出范围,一定要强制类型转换符

byte d=(byte)128可以,但是一定会损失精度
这个时候输出的是-128

原数据 00000000 00000000 00000000 10000000(int型)
转换完 10000000(是一个补码)
	减一
	01111111
	反码
	10000000   128
	原码:-128

8位的二进制本来就不存在正128的表示方法
10000000就是-128虽然128的二进制是10000000

short,byte,char如果没有超过取值范围也可以直接转换(因为精度没有损失)

int不管有没有超过都不行,都必须要强制转换