Java通过哪些机制处理数据(2)-数据类型

一、数据类型

(1)数据类型概述

(a)数据类型有什么用?

数据类型用来声明变量,程序在运行过程汇总根据不同的数据类型分配不同大小的空间。

Int I =10;

Double d =1.23;

i变量d变量类型不同,空间大小不同。

(b)数据类型的分类:

第一种:基本数据类型

基本数据类型又可以划分为4大类8小种:

第一类:整数型,第二类:浮点型,第三类:布尔型,第四类:字符型

8小种:(小写)

Byte,short,int,long,Float,double,Boolean,char

第二种:引用数据类型

字符串型String属于引用数据类型。

String字符串不属于基本数据类型范畴。

java中除了基本数据类型外,剩下的都是引用数据类型。

(c)8种基本数据类型中(计算机存储单位)

整数型:byte short int long有什么区别?

浮点型:float和double有什么区别?

区别:占用的空间大小不同。

(d)关于计算机存储单位?

计算机只能识别二进制。(1001)

1字节=8比特(bit)

1bit就是一个1或0

Byte short int long分别占用的空间大小为

1    2      4   8

Float double boolean char

4       8     1        2

(e) byte类型的取值范围?

byte是[-128 ~127]共,可以表示256个不同的数字。

byte类型的最大值是怎么计算出来的?

byte是1个字节,是8个比特位,所以byte可以存储的最大值是:

01111111

二进制最前面的是代表符号位,0代表正数。1代表负数。

2的7次方-1就是byte的最大值128-1=127

Byte:[-128 ~127]

Short:[-32768~32767]可以表示65536个不同的数字

Int:[-2147483648~2147483647]

Char:[0~65535]可以表示65536个不同的数字

short和char实际上容量相同,不过char可以表示更大的数字。

因为char表示的是文字,文字没有正负之分,所以char可以表示更大的数字。

(f)字符编码:

其中byte,short,int long, float,double,boolean这7种数据类型在计算中容易表示,

但是char类型,因为是各个国家的文字,没有办法直接转换成二进制,所以就想到了“字符编码”通过每个文字,对应一个二进制。最先是英文(ASCII)

'a'--(采用ASCII码进行编码)->01100001

01100001 --(采用ASCII码进行解码)->'a'

如果编码和解码采用的不是同一个编码方式,会出现乱码。

97(十进制)

在java中,java语言为了实现全球的文字,所以采取了unicode编码的方式。

具体实现:UTF-8 UTF-16 UTF-32 …

Char='ab'//这样是错误的。

(2)转义字符

Char c1 = '\t';

正常的情况下,它应该报错,但是它通过了,说明它不是字符串,它是单个字符。

所以它表示“制表符tab"

(1)java语言中\负责转义,\t表示制表符tab

(2)\n表示换行符

(3)如果想在控制台上输出\怎么办?

System.out.println('\');

//加入两个反斜杠,代表一个普通的\

System.out.println('\\’);

// \'表示一个普通的'的单引号字符。

System.out..println('\'');

//这样就输出了'

(4)\u表示后面的是Unicode编码 

(3)自动类型转换

在java早上有一条非常重要的结论:

在任何情况下,整数型的“字面量/数据"默认被当做Int类型处理。

如果希望该“整数型字面量”被当做Long类型来处理,需要在“字面量”后面添加L/l

建议使用大写L,因为小写l和1分不清。

//分析一下是否存在类型转换?

//200这个字面量 是默认的int类型,int占有4,long占有8个

//小容量可以自动转换成大容量,这种操作被称为:自动类型转换。

Long b =200;

//这种不存在自动类型转换,就是赋值。

Long c = 300L;

Long a = 2147483647;

Long d = 2147483648;

//a会通过,但是d通过不了,会报数字太大,解决方法在后面加L

Long d = 2147483648L;

以上是自动类型转换(小容量可以自动赋值给大容量)

(4)强制类型转换

从大类型到小类型,可能存在损失。

那么怎么转换呢?要想编译通过,必须加强制类型转换符,进行强制类型转换。

当然也有可能损失精度。

Int smallA = (int) bigA;

这样编译就可以通过了,但是运行可能存在损失精度。

java中有一个语句规则:

当这个整数型字面量没有超出byte的取值范围,那么这个整数型字面量可以直接复制给byte类型的变量。

主要是方便写代码

Byte x =1;

Byte y =127;

Byte z =(byte)128;

(5)char

(1)整数能否直接赋值给char

1、两个都输出英文字母a,所以如果char后面有数字,java语句是允许的,并且java输出英文字母,当int赋值char时,会产生自动类型转换。

2、char类型取值范围是0~65535

当char c1 = 65536时,会报错。

3、当一个整数没有超出byte,short,char时的取值范围的时候,可以直接赋值给他们,不用强转。

(6)Byte short char混合运算

char、byte、short做混合运算的时候,各自先转换成Iint再做运算。

Char c1='a';

Byte b =1;

Short s = c1+b ;//这时候会报错,编译器不知道这个加法最后的结果是多少,只知道Int类型。

Short s = 98;//这样可以。

Short s =(short)(c1+b);

(7)多种数据类型混合运算

多种数据类型做混合运算的时候,最终的结果是“最大容量"对应的类型。

Char + short + byte 这个除外。

因为char + short + byte混合运算的时候,会自动转换成Int。

Long a = 10L;

Char c = 'a';

Short s =100;

Int I = 30;
//求和

System.out.println(a+c+s+i);//237

Int x =a+c+s+i//会报错误

Int x = (int)(a+c+s+i);

//java中规定,int类型和int类型最终的结果还是int类型

Int temp = 10/3

System.out.println(temp);//结果是3

(8)浮点型数据

关于java语言中的浮点型数据

浮点型包括:

Float 4个字节    单精度

Double 8个字节 双精度

财务软件用的是java.math.BigDecimal(这种不属于基本数据类型,这是引用数据类型)。

float和double存储数据的时候都是存储的近似值。

为什么?

因为现实世界中有这种无线循环的数据,例如:3.3333333

数据实际上是无限循环,但是计算机的内存有限,用一个有限的资源表示无限的数据,只能存储近似值。

long类型占用8个字节。

float类型占用4个字节。

那个容量大?

注意:任意一个浮点型都比整数型空间大。

float容量>Long容量。

java中规定,任何一个浮点型数据默认被当做double来处理,如果想让这个浮点型字面量被当做float来处理,那么,请在后面添加F/f

1.0 默认当做double类型来处理。

1.0F 这才是float类型

(9)布尔型数据

1、在java语言中boolean类型只有两个值,没有其他值。

true和false。

不像C或者C++,C语言中1和0也可以代表布尔类型。

2、boolean类型,在实际开发中使用在哪里呢?

使用在逻辑判断当中,通常放到条件的位置上。(充当条件)

(10)总结:在基本类型转换需要遵循的规则

1、八种数据类型中,除boolean类型不能转换外,其他类型均可转换。

2、如果整数型字面量没有超出byte,short,  char的取值范围,均可直接将其赋值给byte,short ,char类型的变量。

3、小容量向大容量转换为自动类型转换,容量从小大到达的排序:

Byte<short(char)<int <long <float<double。

4、大容量转换为小容量,称为强制类型转换,编写的时候,必须添加“强制类型转换符".

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

6、多种数据类型混合运算,各自先转换成容量最大的哪一种再做运算。

总结:我们生活中可能会各种各样的数据,比方说,我买了1瓶水,你是个好人,这是对的,各个国家有各个国家的文字,等等,那么怎么在计算机上去表示这些现实生活中的事物呢,在JAVA中它就用到了数据类型,通过不同的数据类型,在计算机内存中开辟的空间也是不一样的。

发布了168 篇原创文章 · 获赞 28 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/MyxZxd/article/details/105676953