【JAVA零基础入门系列】Day3 Java基本数据类型

  前两篇已经将开发环境搭建完成,如果你已经按之前的教程按部就班的完成了部署,那么世界上最优秀的编程语言之一和世界上最优秀的IDE之一已经出现在你的电脑上(此处应有掌声),如果你还没入门,或者正在台阶上踱步,可能你还不能理解这个“最优秀”的含义,没有关系,这顿美味需要我们来细嚼慢咽才能品尝到它的独特之处。

  接下来,就让我们一起来正式揭开Java的面纱。

  Java是一门简单、面向对象、高性能、安全性高、健壮性强、移植性好的语言(一本正经的胡说八道中)。Java的语法跟C++很像,如果有过C++学习经验的人,学习Java上手会容易很多,Java一开始很多特性都跟C++相同,比如基本的程序结构、类、语法规则等等,但是删除了其中很多复杂的东西,比如头文件,结构,联合,操作符重载、虚基类等等,看到这里,学过C++的你可能会觉得很高兴,终于不用跟那些奇奇怪怪的东西打交道了。别高兴的太早,因为,还有让你更高兴的(手动滑稽),那最头疼的指针操作部分,也去掉了,可以说是一个纯净简化版的C++,但也添加了很多自己的特性,没有了多重继承,取而代之的是接口和内部类,由于不允许直接操作指针,所以就不会因为对指针的一顿瞎操作而出现神奇的bug,当然,也少了很多寻找bug的乐趣(尴尬),Java在安全性能上是可以信任的,因为永远不会存取一个坏的指针,而造成内存分配的错误,也不存在内存泄漏问题。所有那些因为指针引起的安全隐患,都不存在的。

  也许说了这么多,对于新手的你,看的云里雾里,不知所云,没关系,你只需要知道,Java上手并不难,只比绕操场跑上十来圈难那么一点点,但如果你只是想来散散步的话,那你可能没有机会享受到汗流浃背后的满足感了。

  言归正传,Java可以写桌面、可以写Android、可以写服务器、可以写企业级业务、可以写互联网业务。如果你以后想在安卓开发、服务器开发、网站后台开发和维护上有所发展,那Java将是你不错的选择。如果只是想来膜拜一下这门常年位居编程开发语言排行榜榜首的语言,那也可以来看看,俗话说的好,技多不压身嘛,以后见了不会编程的朋友,还可以装个X说我也是学过Java的人(憋笑)。

  简单介绍了Java的功能后,能坚持看到这说明你已经有点小心动,想要继续学下去,那就跟我一起来进行系统的学习吧。

  要学习Java,自然要从基本的数据类型说起,那么,什么是数据类型?顾名思义嘛,就是不同的数据有不同的类型,就像人按性别分男女,按年龄分老中少,按性情分攻受(咳咳,这里只是为了举个栗子),在java里,基本的数据类型有四种,整数型,浮点型,布尔型和字符型。下面来一一介绍。

  整型,自然就是用来存放整数的, 比如说:1,2,3,4,100,等等,一般的整数都可以用int型来存放和操作,整型还可以根据取值范围需求不同再细分成int型,short型,long型,byte型,这几个兄弟排个序,从大到小分别是long、int、short、byte。long型最大,占用8个字节(在java中,讨论最小的存储单元是bit,也就是位,byte是字节,跟位的换算是:1byte=8bit,1kb=1024bytes=2^10bytes),作为整型中的老大,占用8*8=64位,所以除去第一位用于储存符号位,其它63位可以用来表示数值大小,所以它的表示范围为:-2^63 — 2^63-1。大概是百亿亿的级别,所以要是用来存放你的银行卡余额的话,还是不要劳烦long型了(滑稽)。作为最常用的整数型老二,int型可谓是人尽皆知,几乎成了整型的代表人物,它只占用4个字节,取值范围为-2^31 — 2^31-1,比21亿稍微多一点。而老三short,顾名思义,比较“短”,不能跟18cm的long型相提并论,只占用2个字节,表示范围为-2^15 -- 2^15-1,也就是-32768 -- 32767,做小范围的加减乘除的话是够用的。最后介绍的老四,byte型,只占用一个字节,可谓是相当拮据,表示范围为 -128-127。所以存余额的话,byte,short型太短,long型太长,所以用int型最经济实惠。

  初学编程的人可能会问了,好好的整数型,还分那么细干嘛。这你就不懂了吧,举个栗子,因为用于存放数据的内存空间是以位为基本单位,可以理解为很多很多相同的小盒子,相同的数据类型需要用同样大小的空间,不然程序就不知道数据的开始和结束位置,用数据头部来存放大小长度信息显然有些浪费空间,那么现在的问题是,一个整数,用多大的空间合适?你可能会觉得,都用同样大小的空间不就好了,那都用8个字节来存储,用来存放大数值的时候很好用,但是用来存放你的年龄的时候,仿佛浪费的空间就有点多了,就好比现在你有一个篮球,一个网球,一个足球,一个乒乓球,都需要用同样大小的盒子来单独存放,那规格自然只能按最大的来算,当你往那个大盒子里放一个乒乓球的时候,不觉得很浪费空间吗。所以为了避免这样不必要的浪费,设计多种整数型是有必要的。当然,也没有必要对于内存太过斤斤计较,如果不是在搞算法研究,不是对时间跟空间效率要求很苛刻的条件下,基本上都用int型就好了。毕竟一般情况,运行效果比运行效率更重要。

  接下来说浮点类型,为什么叫浮点类型,自然是用来表示浮点数的(废话),那什么是浮点数,这。说来又要有一段文章了。在计算机中,表示小数有两种方法,一种叫定点,一种叫浮点。

image.png

  以32位程序为例,定点的意思是,小数点固定在 32 位中的某个位置,前面的是整数,后面的是小数。小数点具体固定在哪里,可以自己在程序中指定。例如上面的例子,小数点在 23 bit 处。无论你是124.25,是0.5, 还是100, 小数点都在 23 bit 的位置固定不变。

image.png

  浮点数是相对定点数而言的,浮点数的表示方法为:

image.png

最高的 1 位是符号位 s,接着的 8 位是指数E,剩下的 23 位为有效数字 M。例如:

  5 DEC = 101 BIN = 1.01 x 2^2

  100 DEC = ‭01100100‬ BIN = 1.100100 x 2^6

  0.125 DEC = 0.001 BIN = 1 x 2^-3

  现在,小数点的位置就漂浮不定了。如果想了解关于浮点数的存储问题,可以看看这篇文章,https://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html

,当然,新手的话建议先别看了,免得被吓跑了,你只需要知道,浮点型就是用来存取带小数点的数就可以了。

  浮点数也分成两个类型,float和double,float占用四个字节,取值范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double占用八个字节,取值范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

  float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

  double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

  你如果对于这两个类型傻傻分不清楚,那就只用double类型就好了,java里最常用的浮点类型就是double类型。

  扯的有点多了,布尔型都等不及了,别担心,布尔型(boolean)是最简单的,只有真(true)跟假(false)两种状态。

  最后就是字符型(char),用于存放字符的数据类型,占用2个字节,采用unicode编码,它的前128字节编码与ASCII兼容字符的存储范围在\u0000~\uFFFF,在定义字符型的数据时候要注意加' ',比如 '1'表示字符'1'而不是数值1。

  好了,基本数据类型就介绍这么多了,总的来说,整型用来存放整数,浮点型用来存放小数,布尔型用来存放真假,主要用于逻辑判断,字符型用来存放单个字符,比如:'a','b','c'等等。Java中整数默认为int型,小数默认为double型。

  最后再说一点,不同数据类型之间也是可以相互转换的。Java中也是有着弱肉强食的规则,谁占地多谁就大,一个整数型int跟一个浮点型double一起运算时,会自动转化为double型,这样就能无精度损失的进行数值运算了。下面是数据类型之间的合法转换:

image.png

  那我非要进行“非法转换”怎么办,一个占用8字节的double型非要转换成占用4字节的int型该怎么办,那就只能用强制类型转换了,但这样可能会造成精度的丢失。具体情况暂时不多做介绍了,不然又要说半天才能说的完了。

  好了,今天的内容到此结束,基本数据类型都看了个遍,如果还是有些不明白,也没有关系,一回生二回熟嘛。来日方长,日后再说吧。(溜了溜了)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iKcamp

翻译连载 | 附录 A:Transducing(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 JavaScript 轻量级函数...

2138
来自专栏小樱的经验随笔

【Java学习笔记之十三】初探Java面向对象的过程及代码实现

理解Java面向对象的重要知识点: 一、 类,对象 类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的、红色的、白色的... ...

3396
来自专栏Python

面向对象的三大特性(封装、继承、多态)

继承 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类...

1.7K9
来自专栏cs

python笔记一 入门py

id()函数,是python内置函数,查看每一个对象的地址。 >>> help(id); Help on built-in function id in mod...

3736
来自专栏Crossin的编程教室

这些年,你们一起踩过的坑(2)

上次我们踩坑总结文章 这些年,你们一起踩过的坑(1) 受到了不少同学的认可。我也确信文中所涉及的问题是非常具有普遍性的,对绝大多数初学者都会有帮助。

1163
来自专栏Spark学习技巧

Flink DataStream编程指南

Flink程序是执行分布式集合转换(例如,filtering, mapping, updating state, joining, grouping, defi...

1.9K7
来自专栏令仔很忙

C#----委托和事件(一)

最近在做的项目,正在进行重构,之前的框架就是纯三层的简单调用,外加一些Session,SQLHelper等封装管理类,其他的东西,一直也想去抽象,但是奈何能力...

6811
来自专栏Java Web

《编写高质量代码》学习笔记(1)

前言 看大神推荐的书单中入门有这么一本书,所以决定把这本书的精华(自认为很有用的点),或许是我自己现在能用到的点都提炼出来,供大家参考学习。 以下内容均出自《...

4024
来自专栏C/C++基础

基数排序简介及其并行化

  基数排序号称线性时间排序算法中性能最好,速度最快的排序算法。本文将简要概括其算法思想,串行代码及其并行化。

1391
来自专栏

shell之sort命令

1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 [rocro...

2107

扫码关注云+社区

领取腾讯云代金券