🌀🌀🌀作者:@小鱼不会骑车 🍁🍁🍁专栏:《java练级之旅》 🎀🎀🎀个人简介:一名专科大一在读的小比特,努力学习编程是我唯一的出路😎😎😎
前言
这是小鱼写的第一篇关于java的博客,也可以说是对小鱼成长的见证者,在这片java大陆,我们一起练级,一起交流,借鉴优秀的作品,不断使自己进步,努力的写出更优秀的博客。(这篇博客总共2000字左右,涉及到完整的数据类型讲解,大家一般是15分钟就能阅读完成,作者把一些初学者的问题进行了解答,看完也不会感觉累,希望大家能够三连!!!)
在这里我给大家画了个简单的思维导图,可以很直观的帮助大家看到他们之间的层次,
(练级第一天)
练级第一步
了解数据类型
大家可以看到,这张图片简单的包含了数据的类型,类型名,内存占用的大小,以及范围, 注意!!!在java中每个数都默认是有符号的。 注意!!!
- 不论是在16位系统还是32位系统,我们的int占4个字节,long占8个字节,
- 整形和浮点型都是带有符号的
- 整形默认int型,浮点默认double型
- 字符串属于引用类型后续介绍
1.整形
1.1 byte
- byte占一个字节(8个比特位)
- 范围是-2^7 ~ 2^7-1(-128~127);
- byte的包装类是Byte
接下来用IDE给大家看一下在编译器中我们的byte的最大值和最小值 这个就是我们的编译器中byte的最大值和最小值,有的人可能会问,咦?你这个首字母大写的Byte什么意思,这里先不做过多解释,大家只需要知道,这个就相当于byte的加大版本就好,后续练级手册会讲解到(小鱼现在暂时没学,后续等小鱼学会了就会发博客),好的回归正题,
问题:如果我给byte存了个大于127的数会怎么样
这里我就要好好的夸一下我们的java了,在java中,如果我们存的一个值超过了这个数所能接受的最大数值,那么就会报错,编译也自然无法通过,如图, 再给大家看一下C语言的对比
大家可以看到,虽然我们的编译器可以通过编译,但是我们的值也已经发生了截断,这样就会造成数据丢失,是一个潜在的威胁,但是java不会,你给我的数字只要是大于我能够接受的范围,那我就报错,就像这个图 你把一个只能装一升水的杯子,妄想让他去装二升,那怎么可能,结婚还讲门当户对呢,更何况编译器(忽略我拙劣的画画水平)
1.2 short
- short在任何系统下都占2个字节,也就是16个比特位(一个字节八个比特位),
- 范围是-2^15 到 2^15-1,
- short的包装类Short
接下来用编译器给大家看看short的最大值和最小值,
这里给大家留下个问题,我们的short类型再进行运算操作时,是用两个字节进行的嘛,还是四个字节?同上,我们的byte类型也留下这个疑问
1.3 int
- int在任何系统下都占4个字节,也就是32个比特位(一个字节八个比特位),
- 范围是-2^31 到 2^31-1,
- int的包装类Integer
给大家看看在编译器下我们的int类型的最大值和最小值 其实在C语言中,我们的int的字节是根据编译器的位数决定的,我们的编译器如果是32位,那么我们的int就是4个字节,如果我们的编译器是16位,那么我们的int就是2个字节,但是java不一样,java的宗旨就是 这就体现了java的优势,到后面你们也会更加迷恋上java对于操作的方便,快捷,高效。
1.4 long
- 长整型变量初始化值后加L或l(推荐加L)
- 长整型无论在哪个系统下都占八个字节
- 长整型的表示范围为:-2^63 ~ 2^3-1
- long的包装类型为Long
接下来用编译器给大家看一下我们的long的最大值和最小值,特别特别大, 大家就可以看到,非常非常大,19位数,以及超出我的认知了,不过如果大家感兴趣可以去百度一下 今天可算是知道之前小说看到的无量境界是什么意思了。 现在解释一下我们上面提到的为什么后面要加上L或l,
关于为什么用大写的“L”各位也清楚了吧,这个编译器太坑了,根本不好区分“l”和1,所以大家要有一个好的编程习惯呦,用大写L!!!
2.浮点型
2.1 float
- 单精度浮点型初始化要在后面加上f
- float是四个字节
- float a=10f;//标准写法 float的包装类位Float
可能有的人就会问,为什么要加上这个“f”, 大家看这个图,我们如果不加的话,编译器就会直接报错,因为浮点数在编译器中是按照八个字节存放的,但是float是四个字节,这样就会产生矛盾,所以我们需要在后缀加上“f”告诉编译器我是4个字节,不要再报错了!!! float的包装类如上图
2.2 double
- double在任何系统下都占8个字节
- 浮点数与整数在内存中的存储方式不同,不能单纯的使用2^n的形式来计算
- double的包装类为Double
3.字符类型(char)
- 内存占用2个字节
- 范围0~65535(字符类型没有负数)
- char c1='A'
- char c2='a'
- 注意!!!java的字符可以存整形
问题1.存负数时? 问题2.我存一个整形值时? 问题3.可不可以存汉字?
来一个一个解答 第一个,由于我们的字符类型时没有负数的,所以第一个自然就会报错, 我们再看一下第二个和第三个的运行结果
大家可以看到成功的输出了,但是大家可能会有疑问,我明明存在c2的是97怎么就输出了a呢,其实因为a对应的ascll值是97,所以我们输入97其实就是a,另一个,我们的字符为什么可以存汉字,为什么c语言的不可以,其实是因为我们的java中字符类型是2个字节,那是因为我们的java中运行的是 unicode编码这个编码其中包含着我们所熟知的ascll的,大家如果有兴趣可以去unicode地址
4.布尔型(放在一起讲)
注意事项
- boolean类型的变量只有两种取值,ture表示真,false表示假
- java中的boolean类型和int不能相互转换,不存在C语言中的1表示真,0表示假的这一说辞
- 同时我们的boolean类型不存在运算这个说法
会爆出这样的错误,解决办法 我们的while循环,以及我们的if判断条件判断的都是boolean,所以不能再和C语言一样用0或1表示真假了。
练级第二步
关于隐式类型转化和显示类型转化下一篇博客会讲解到。 我们下期见~