Java中的数据类型

一、

   

关于java中的数据类型:

  1.数据类型的作用是什么?

    程序当中有很多数据,每一个数据都是由相关类型的,不同数据类型的数据占用空间大小不同。

    数据类型的作用是指导JVM在运行程序的时候给该数据分配多大的内存空间。

 2.java中的数据类型包括两种:

    *基本数据类型

    *引用数据类型

        类、接口、数组…

 3.关于基本数据类型:

   *基本数据类型包括四大类八小种

       第一类:整数型

          byte shot int long

       第二类:浮点型

          float double

       第三类:布尔型

          boolean

       第四类:字符型

          char

4.字符串"abc"不属于基本数据类型,属于“引用数据类型”,字符属于基本数据类型

    *字符串使用双引号"abc"

    *字符使用单引号'a'

5.八种基本数据类型各自占用空间大小是多少?

基本数据类型

占用空间大小

byte

1

short

2

int

4

long

8

float

4

double

8

boolean

1

char

2

6.计算机在任何情况下只能识别二进制(现代的计算机底层采用交流电的方式,接通和断开就两种状态,计算机只识别1或0,其他不认识)

7.什么是二进制?

   *数据的一种表示形式,十进制表示满十进一原则,二进制表示满二进一原则。

8.字节(byte)

    1 Byte =  8 bit(1个字节等于8个比特位,1个比特位表示一个二进制位:1/0)

    1 KB = 1024 Byte

    1 MB =1024 KB

    1 GB = 1024 MB

    1 TB = 1024 GB

    1 TB =1024*1024*1024*1024*8 bit

9.整数型当中的byte类型,占用一个字节,所以byte类型的数据占用8个比特位,那么byte类型的取值范围是多少?

  *关于java中的数字类型,数字都是由正负之分的,所以在数字的二进制当中有一个二进制位成为”符号位“,并且这个”符号位“在所有二进制的最左边,0表示整数,1表示负数。

  *byte类型最大值:01111111

   【00000000 00000000 00000000 10000000(二进制)

             减去1的结果是:

      00000000 00000000 00000000 01111111 (二进制)

   】

  *byte类型最大值:2的7次方-1,结果是:127

  *byte类型最小值: -128

  *byte类型取值范围:[-128 ~ 127]

  *bytel类型可表示256(包括0)个不同数字(256个不同的二进制)

10.计算机只认识二进制,那么计算机是怎么表示现实世界当中的文字的呢?

    *八种基本数据类型当中,byte,short,int,long,float,double,boolean这7种数据类型计算机在表示的时候比较容易,因为底层都是数字,十进制的数字和二进制之间存在一种固定的转换规则

    *但是八种基本数据类型char类型表示的是现实世界中的文字,文字和计算机二进制之间”默认“情况下是不存在任何转换关系的。

    *为了让计算机可以表示现实世界当中的文字,我们需要进行人为的干涉,需要人负责提前制定好”文字“和”二进制“之间的对照关系。这种对照转换关系被称为:字符编码。

   *计算机最初只支持英文,最早出现的字符编码是:ASCII码

     'a' --> 97 [01100001]

     'A'--> 65

     '0'--> 48

      'a' --(按照ASCII解码)-->01100001

      01100001--(按照ASCII编码--> 'a'

  *编码和解码时采用同一套字典/对照表,不会出现乱码

   当解码和编码的同时采用的不是同一套对照表,会出现乱码问题

*随着计算机的发展,后来出现了一种编码方式,是国际化标准组织ISO制定的,这种编码方式支持西欧语言,向上兼容ASCII码,仍然不支持中文。这种编码方式是:ISO-8859-1,又称为latin-1

*随着计算机向亚洲发展,计算机开始支持中文,日文,韩文等国家文字,其中支持简体中文的编码方式:

    GB2312

 *支持繁体中文:大五码

 *后来出现一种编码方式统一了全球所有的文字,容量较大,这种编码方式叫做:unicode编码

   unicode编码方式有很多种具体的实现:

         UTF-8 UTF-16 UTF-32

  *java语言源代码采用的是unicode编码方式,所以”标识符“可以用中文

  *现在在实际开发中,一般使用UTF-8编码方式较多。【统一编码方式】

11.八种基本数据类型的取值范围

类型

取值范围

byte

[-128~127]

short

[-32768~32767]

int

[-2147483648~2147483647]

long

float

double

boolean

true  false

char

[0~65535]

  注意:short和char所表示的种类总数是一样的,只不过char可以表示更大的正整数,因为char没有负数

12.关于八种基本数据类型的默认值

     数据类型                                    默认值

 --------------------------------------------------------------

 byte short int long                           0

 float double                                     0.0

 boolean                                          false[C语言中,true表示1,false表示0

 char                                                \U0000

注意:八种基本数据类型的默认值是一切向0看齐

13.成员变量没有手动赋值系统会默认赋值,局部变量不会

二、

关于java语言中的char类型:

  反斜杠(\)表示转义

  转义字符(\)出现在特殊字符之前,会将特殊字符转换成普通字符

  \n   换行                                 \b     退格

  \t    水平制表符                       \r     回车

  \'    单引号字符                       \f      换页

  \"   双引号字符

  \\   反斜杠字符

注意:制表符和空格不同,他们的ASCII不一样,体现在键盘上两个不同的“按键”

*一个中文占用两个字节,char类型正好是2个字节

  所以java中的char类型变量可以存储一个中文字符

*JDK中自带的native2ascii.exe命令,可以将文字转换成unicode编码形式

   怎么使用这个命令?

     在命令行输入native2ascii,回车,然后输入文字之后回车即可得到unicode编码

*“\u"  后面的一串数字是某个文字的unicode编码

*字符型数据实际上是int数据的一个子集,char类型的数据可直接转换为int类型的数据,而int类型的数据转换成char类型的数据需要强制转换。

关于java语言当中的整数型:

 1.java语言当中的”整数型字面值“被默认当作int类型来处理,要让这个”整数型字面值“被当作long类型来处理的话,需要在”整数型字面值“后面添加l/L,建议使用大写的L。

 2.java语言当中的的整数型字面值有四种表示方法:

     第一种方式:十进制(是一种缺省默认的方式)

     第二种方式:二进制(在编写二进制整数型字面值时需要以0b或0B开始)

     第三种方式:八进制(在编写八进制整数型字面值时需要以0开始)

     第四种方式:十六进制(在编写十六进制整数型字面值时需要以0x/0X开始)

3.long x = 456;

   456整数型字面值被当作int类型,占用四个字节

   x变量在声明时时long类型,占用8个字节

   int类型的字面值456赋值给long类型的变量x,存在类型转换

   int类型是小容量,long类型是大容量

   小容量可以自动转换成大容量,称为自动类型转换机制

4.在字面值一上来就当作long类型来处理,在字面值后面添加L

5.long x = 100L;

   int y = x;

   编译报错,大容量不能直接赋给小容量

6.大容量转换成小容量,需要进行强制类型转换,强制类型转换需要加”强制类型转换符“

   加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度

   所以强制类型转换谨慎使用,因为损失精度之后可能损失很严重

7.在java语言中,当一个整数型字面值没有超出byte类型取值范围的话,该字面值可以直接赋值给byte类型的变量

8.当一个整数字面值没有超出byte,short,char的取值范围,这个字面值可以直接赋值给byte,short,int,char类型的变量,这种机制SUN允许了,目的是为了方便程序员的编程。

三、

 关于浮点型数据类型:

  float  单精度【4个字节】

  double 双精度【8个字节,精度较高】

double的精度太低【相对来说】,不适合做财务软件

财务涉及到钱的问题,要求精度较高,所以SUN在基础SE类库当中

为程序员准备了精确度更高的类型,只不过这种类型是一种引用数据类型,

不属于基本数据类型,它是:java.math.BigDecimal

 其实java程序中SUN提供了一套庞大的类库,java程序员是基于这套基础的类库来进行开发的。所以要知道java的

SE类库的字节码在哪儿。要知道java的SE源码在哪?

   SE类库字节码:C:\Program Files\Java\jdk1.8.0_111\lib

   SE类库源码:C:\Program Files\Java\jdk1.8.0_111\src.zip

例如:String.java和String.class

我们的(String[] args)中的String使用的就是String.class字节码文件

在java语言当中,所有的浮点型字面值(3.0),默认被当作double类型来处理,

要想该字面值当作float类型来处理,需要在字面值后面添加F/f

例: float f = 5.1  //编译错误  5.1是double类型的字面值,f是float类型的变量,大容量转换为小容量需要加强制类型转换符,两种解决方案

  第一种:强制类型转换    float f = (float)5.1

  第二种:没有类型转换    float f = 5.1f

注意:double和float在计算机内部二进制存储的时候都是近似值

          在现实世界当中有一些数字是无限循环的,例如3.33333333……

          计算机的资源是有限的,用有限的资源存储无限的数据只能存储近似值

关于布尔型数据类型:

   boolean

在java语言当中boolean类型只有两个值:true和false,没有其他值

不像C语言当中,0和1可以表示假和真

在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0

true底层是1

布尔类型在实际开发当中非常重要,经常使用在逻辑运算和条件控制语句当中

关于基本数据类型之间的互相转换,转换规则

 1.八种基本数据类型当中出布尔类型之外剩下的7种类型之间都可以互相转换

 2.小容量向大容量转换,称为自动类型转换,容量从小到大排序,

    byte

             char<

    注:任何浮点类型不管占用多少个字节,都比整数型容量大

           char和short可表示的种类数量相同,但是char可以取得更大的正整数

3.大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用

4.当整数·字面值没有超过byte,short,char的取值范围,可以直接赋值给byte,short,charl类型的变量

5.byte,short,char混合运算的时候,各自先转换成int类型再做运算

6.多种数据类型混合运算,先转换成容量最大的那种类型在做运算

注:

  byte b = 3; 可以编译通过,3没有超出byte类型的取值范围

  int i=10;

  byte b = i/3 编译错误,编译器只检查语法,不会”运算“i/3

你可能感兴趣的:(java,开发语言)