零碎小玩意-为什么Java的long要加L

<!–markdown–>当写了这么一个代码,申明一个long变量,内容是23333333333,大小已经超过int类型但小于long

long num = 2333333333

会出现一下错误:
why?
why?ctm明明是long,为什么是 int 类型?
书上是这么写的:

对于long型值,若赋给的值大于int最大值,小于int最小值,则需要在数字后加L或者l.
但是,,,,,为什么

long要加 L????

对于java(大多语言),肯定不是以类型 变量名 = 内容这种固定格式来理解为整那么一个变量的
这玩意,是拆开读的,差不多就是…
long 表示整这么个变量 名字是它后面的东西
= 代表赋值 把后面的赋值给前面
那么这整句的意思就是
创建一个num变量,类型是long,再把23赋值给num
而Java要先理解23…
如果你只打一个23,那么Java就将其视为int类型的23
→long只提供创建一个能装那么大数字的变量
所以要加一个L来告诉Java,这是一个long类型的东西
就像””表示字符串,当你print(23)的时候Java将其视为int,当print(23L)java就将其视为long了(啰嗦)
同理,结尾加:
b 表示byte
f 表示float浮点数
d 表示double浮点数

java语言默认情况下是int类型的,因此如果你仅仅写一个 23那就是int类型的’23’,如果你想要一个长整型(long)的’23’那么就要加以区分,在后面加上L这样 23L就是 long类型的。

于是就有这么一个坑

byte b=3 b=b+3

直接写出来的整数默认是int类型的,而你声明的b是byte类型的,int与byte混合运算会把byte转换为int再计算,得到的结果是int类型的,但是你又赋值给了byte,就会出类型错误
对于加法运算,如果两边类型不一样,则其中一个自动转换成与另一个相同的类型,再运算;如果一样,对于比int低的类型,JVM是全部转换为int型来计算的,所以结果就似乎右边的b1+b2的结果提升为int,赋值给byte需要强制类型抓转换。

评论