返回
大猿软件
置顶
该校与厚学网暂未合作,平台不保证课程的真实有效性,如有侵权等争议,请及时与厚学网联系处理
招生热线:400-800-2178

学校地址:江苏省南京市浦口区星火E方

Java基本类型详解

213 2017-12-22 09:07:56

学习笔记

  在现实生活中,我们能够接触的到信息有很多种,有文字的,有数字的,有图片的,有声音的,还是视频的,这些信息我们随处可见,可以说我们离不开这些信息。现代的人们离不开计算机,计算机能够帮我们处理很多信息,不管是声音的、文字的还是数字的,它能够轻易的处理,计算机之所以能够处理这些信息,是因为它安装了程序的原因,程序能够帮助我们解决实际的问题,所以,程序是可以分辨出这些信息的。我们知道计算机只内部只认识0和1,但是程序语言是很符合人类的自然语言,人类是可以看得懂并且可以编写出来的,既然是符合人类自然语言的,就会模拟我们人类现实世界中的各种信息种类。那么,我们就来看下Java语言中,有哪些基础的信息类型。

  数字:

  首先我们看下现实生活中的数字,数字可以分为整数和小数,另外,数字有大小之分,而我们日常所能接触到的数字大多都在亿级以内,如果再分常用的,可能就在百和千之间了,所以,这么多的数字,我们人类不是都会需要用到,常用的也许就那么一点点范围,就足够我们正常使用的了,我们的Java语言考虑到这个问题,所以就把数字分为整形和浮点型(也就是小数),整形又分为了byte、short、int和long,浮点型分为了float和double。Java把数字分为了6种类型,每个类型都对于一个范围,我们在使用的时候,就可以选择适合自己的范围,这样能够提高系统的效率。下图就是Java基本类型之数字的分类:

  

  我们来一个个的分析每个数字类型的大小范围。

  1.byte:

  大小范围[-128, 127]。

  2.short:

  大小范围[-32768, 32767]。

  3.int:

  大小范围[-2的31次方,2的31次方-1]。也就是正负21亿左右

  4.long:

  大小范围[-2的63次方,2的63次方-1]。数字很大,只可意会。

  5.float:

  浮点数比较特别,它是由精度的,float大约在[1.4E-45,3.4E38],这是用科学计数法表示的,比如0.05可以表示为5*0.01,用科学计数法表示为:5E-2,如果是500,可以表示为5*100,用科学计数法表示为:5E2。

  6.double:

  double也是浮点数,和float一样,也是用科学计数法来表示,大小范围在[4.9E-324,1.7E308]。

  字符型

  除了数字,日常生活中我们见到多的就是字符了,地球上有两百多个,每个的语言都不尽相同,英语有26个字母,常用的汉子也有三千多个,我们使用计算机能够阅读浏览网页,收发电子邮件,里面充满了各种字符,中文的,英文的,还有各种符号,我们的Java语言也需要处理这些字符,所以,Java就提供了字符型char来表示我们日常使用的字符。

  char:

  大小范围[0, 65535]

  字符型是没有负数的,在Java语言中,字符是按照特定的编码将字符转化成十六进制数字,所以字符和数字之间是可以转换的。

  布尔型

  我们常常判断一个东西的真与,老师批阅试卷,使用✔️号和❌来表示对和错,计算机也要做这样的逻辑判断,所以Java语言提供了布尔型来表示这样的判断,使用boolean来表示,而且它的值就只有两个,一个是true表示真,一个是false表示。

  以上就是Java语言中的基本数据类型,由数字、字符和布尔组成的,其中数字又可以分为整形和浮点型,基本类型的分类如下图:

  

  基本类型的使用

  变量的定义

  上一节我们聊了基本类型在Java语言的分类和定义,这是简单的做了介绍,让大家对基本有个整体的感知,但是,如果只是知道这些基本类型,还不够,还得知道如何去使用这些基本类型,那么下面,我们就来看下基本类型的使用。

  想要使用Java提供的基本变量,我们需要知道如何定义一个变量。变量是有变量名和变量类型组成,变量名就是给变量起个名字,可以是字母组成,也可以是字母+数字组成;变量类型可以是Java提供的8个基本类型,举个例子,我们可以定义一个数字类型的变量num,数字类型我们使用int,定义如下:

  int num;

  这样我们就定义了一个名字叫num,且类型为int的变量。当然我们也可以定义其它类型的变量,如下:

  byte a;

  shrot c;

  long age;

  float amount;

  char sub;

  boolean flag;

  上面是我们定义的一些变量,这些变量的类型都是Java的基本类型,变量名可以取任何的名字,好是由字母组成的,或者是字母+数字,另外,变量名要起的有意义,让人一看就只知道这个变量是代表什么的。

  除了定义变量,我们还可以给变量赋值,语法如下:

  int a = 1;

  boolean flag = false;

  赋值我们使用的是“=”号,注意,计算机在执行赋值语句时,是从右向左执行的,所以上面两句代码,句代表的意思是将数字1赋值给int类型变量的a,第二句代表的意思是将false赋值给boolean变量flag。

  我们在代码中使用变量的时候,要先定义变量,定义完变量后,才能使用变量。另外,我们的基本类型是有初始值的,也就是说,你只要定义一个基本类型的变量,即使没有赋值,它也会有个默认的值,基本类型的默认值,如下表:

  byteshortcharintlongfloatdoubleboolean

  00\u0000000.0f0.0dfalse

  其中,需要大家注意的是,char的默认值是不是很奇怪,这其实是char的一种表现形式,在Java种,char的实质是使用Unicode表示的,所以,只要是字符都可以使用char表示,包括转义字符,如下:

  char a = 'A';

  char b = 100;

  char c = '\u0000';

  char d = '\n';

  以上是char的4中表示方法,种很常见,就是一个字符,第二种,我们把一个数字赋值给了char类型变量b,这牵扯到一个类型转换的概念,因为本质上char是一个Unicode编码,所以可以和它表示范围内的数字进行转换。第三种是直接使用Unicode编码表示的,第四种是一个转义字符,转义字符其实就是我们常见的回车换行、制表符等,这在计算机内部也是使用字符表示的。比如制表符我们使用“\t”表示。

  另外,需要我们注意的是,在Java语言中,小数默认的类型是double类型的,所以,在定义float变量时,需要加上类型转换,如下:

  float a = 3.14f;

  double b = 3.14;

  如上,我们定义了两个浮点类型的变量,其中,变量a是float类型的,此时,需要将数字3.14后面带上小写的f(大写的也可),这就是告诉Java虚拟机,把3.14当做float类型,因为,小数默认的类型是double,所以,变量b就不用转换了,因为b变量本身就是double类型的。如果我们定义float类型的变量,没有进行转换,编译会报错,如下:

  float a = 3.14; //错误,编译通不过,后面需跟上f或者F转换成float才行。

  变量只有定义好之后,才能使用,如下:

  System.out.println(number); //编译报错,number未定义

  我们需要先定义number变量才能使用,如下:

  int number = 100;

  System.out.println(number);

  我们先定义了number变量,然后才在打印输出语句中使用变量number。

  变量之间的转换

  因为每个基本类型都是有其范围的,不同类型之间是不可以随意转换的,比如,byte类型它的范围是[-128,  127],所以,要讲一个300的数字赋值给一个byte变量,很定是有问题的,但是把一个100的数字赋值给byte就没有问题,如下:

  byte a = 100; //正确

  byte b = 300; //编译错误,超出了范围。

  byte类型最大值就是127,把一个300的数字赋给byte,byte接收不了,报错。

  我们知道int类型的变量能够表示正负21亿之多的范围,比byte大多了,如果我们将int类型的变量赋值给byte,会产生怎样的效果呢?我们看下面的例子:

  int a = 500

  byte b = a; //编译错误,把int类型转换为byte类型可能会出现溢出。

  如上,我们定义了int类型的变量a,赋值为500,又定义了byte类型的变量b,我们将变量a赋值给了变量b,我们知道int表示的范围要比byte大很多,所以,Java编译器会报错,因为,它在试图将一个大类型转换为一个小类型,很可能会出现误差。比如,一个水杯,容量是有限的,一旦超过大容量,水就会溢出。同样的,把int类型的值赋值给byte类型,是一个危险的操作,即使int的值实际上并没有超过byte,如下:

  int a = 100;

  byte b = a; //编译错误,int类型转byte类型会出现溢出。

  如上,虽然,int类型的变量a的值并没有超过byte的范围,但是Java编译器依旧会报错,无法将int类型转换为byte,因为这样做是有风险的。当然,也是可以转换的,你得明确的告诉编译器,我就是要转,不转不行。毕竟机器还是得听人类的。我们可以使用强制类型转换,如下:

  int a = 100;

  byte b = (byte)a;

  这样就可以将int类型转换为byte类型了。下面是一个强制转换的例子:

  int a = 100;

  byte b = (byte)a;

  System.out.println(b); //打印出100

  int m = 300;

  byte n = (byte)m;

  System.out.println(n); //打印出44

  如上,在强制类型转换中,如果范围大的变量转换为范围小的变量会出现溢出的现象,一旦溢出,就会有误差,比如上面的将int变量m强制转换为byte类型的变量n,由于,变量m的值为300,已经大于了byte的最大值127了,所以,byte表示不了300,就产生了溢出,导致了误差,所以,变量n打印出来的值是44,和原来的300产生了误差。

  在基本类型中,范围由小到大的顺序如下:

  byte->short->int->long->float->double

  或者

  char->int->long->float->double

  以上是从左到右,范围递增,也就是如果将左边的类型赋值给右边的是没有问题的,安全的,但是反过来,如果把右边的类型赋值给左边的类型,就需要强制转换,这是危险的,可能会出现溢出误差。比如int按照上面的顺序是在byte的右边,所以,将int赋值给byte类型的变量,就得强转,还有可能出现误差。另外,需要大家注意的是,char类型不能和byte、short相互转换,它们是平级的,只能和int转换,这是需要大家的注意的。

  请联系网站,了解详细的优惠课程信息~

  优质、便捷、省心


文中图片素材来源网络,如有侵权请联系删除
来源:大猿软件
热门课程 全部课程

热门动态

申请免费试听

只要一个电话

我们为您免费回电

立即申请
刷新
图形验证
关闭
>>
拖动左边滑块完成上方拼图