Java数据类型

一、变量

变量是一个容器,用来装数据的。一个变量,常规来讲分为两个部分:

变量的名字:标识符

存储数据的空间:内存里面最小的存储单位是字节

在计算机世界里面,所有的数据,其实都是数字。为了方便使用,把连续的8位,作为一个字节进行处理(1 byte=8 bit)。字节是存储的最小单位。字节(Byte)210次方就升级一个单位

1024 B = 1KB

1024KB = 1MB

1024MB = 1GB

1024GB = 1TB

1024TB = 1PB

1024PB = 1ZB

不同的数据,需要使用不同的大小的空间来存储数据。

 

二、数据类型

为了得到一个合适大小的容器来装数据,就需要有不同的数据类型来进行处理。共分为两大类:

  1. 基本类型

八种

  1. 引用类型

无数

1.1基本类型

1.1.1四个整数

不能含有小数

byte: 8位,占一个字节空间

0是第一个正整数,byte的表示范围是 -128 ~ 127之间

short : 16位,两个字节

表示范围是 -32768 ~ 32767

int: 32位,四个字节

正负21亿

long: 64位,八个字节

-2^ 63 ~ 2^63-1

 

四种表示形式

十进制默认方式,所有不同进制的数据,直接输出的时候都是十进制输出

八进制数字前面0开头

十六进制0x开头,x大小写不区分

二进制 0B开头,b不区分大小写,从java 7开始支持

 

赋值规则

1.在使用整数的使用,不能赋予超出数据类型范围的值。

2.整数的默认类型是int,如果给byteshort直接赋予范围内容的整数,会自动转换为合适的类型。

3.如果给long赋予超过int类型的值,必须在数字后面加上L或者l

    Eg. long l1 = 22000000000L;

4.位数比较低的数值,可以直接赋予给位数比较高的变量。位数比较高的数值,赋予给位数比较低的变量,需要强制类型转换,并且可能发生溢出。

 

负数转换为二进制的规则

1.把数字部分转换成原码

2.把原码按位取反,得到反码

3.把反码加一得到补码

 

二进制转换为负数的规则

补码减一

反码取反

原码转换为十进制,前面加上负号

 

1.1.2两个浮点

可以有小数,浮点永远使用科学计数法表示数字

科学计数法

尾数 :不能被整除的部分(小数)

底数 :通常是10,表示10的多少次方

指数 :幂数,多少次方

100 = 0.1 * 10^3

 

float: 32

最高位是符号位(第31位),0表示正数;1表示负数。

2330位,一共8位,是指数位。底数永远是十。

剩余的位数,就是尾数。

eg. 100的存储方式

 

double: 64

double是浮点的默认值,可以满足大部分的使用情况。双精度浮点,精度比float大一倍还多。

最高位是符号位,指数位有11位, 52位尾数。

浮点数赋值规则

1.直接给浮点型变量赋值时,默认是double

2.使用一个float类型的浮点数,需要在浮点数后面加上字母F或者f

Eg.

float f = 12.0F;

double d = 12.0;

 

两种表示形式

1.十进制小数的位数比较少的时候的默认形式

2.科学计数法 <尾数>E<指数>

1.0E-4 = 1.0 * 10^-4

 

三个特殊值

正无穷大 :正数除以0整数不可以除以0!),所有的正无穷大都相等。

负无穷大 :负数除以0,所有的负无穷大都相等,正负无穷大不相等,无法相加。

非数(不是数字) : 0除以0,所有的非数都不相等。

 

1.1.3字符

为了减少存储空间,提高程序的效率,科学家给每个字符一个编号。

这个编号在Java里面是一个只有正数的16位(两个字节)数字,每个编号对应具体的字符。

java里面,char其实就是一个整数,并且没有负数的!范围0~65535之间整数可以直接赋予给charchar也可以赋予给整数。

最早统一规范的字符编号是ASCII,这个编码规范里面只是规定了0~127之间的编号的使用,只有英文字符和标点符号,以及一些打印控制字符。

使用最多的ASCII48开始的065开始的A97开始的a

除了英文之外的其他所有语言的文字,在早期的电脑里面都是没有的。后来其他的国家为了使用电脑,各自开发了自己的"字符编码"。

所有的字符编码规范互不兼容。

发送(保存)的时候使用一个编码规范进行发送和保存,那么接收(读取)的时候,必须使用相同的字符编码规范来操作。否则出现乱码。

 

编译使用UTF-8的编码保存的java文件,需要加上 -encoding UTF-8 参数。

Eg.Linux系统上编写的java代码,默认使用UTF-8编码,在Windows系统下编译会出现乱码,要使用如下命令行:

javac –encoding UTF-8 xxx.java

每个国家都有自己的字符编码规范,中文常用的规范:

gb2312 : 早期的中文字符编码,里面只有常用字符。

gbk : 兼容gb2312的,修正了gb2312里面的错误的地方,并且进行了扩展,支持生僻字、繁体字。

big5 : 繁体中文。

 

为了统一各国的编码,国际上推动Unicode字符集,包括目前地球上几乎所有的文字。

Unicode有很多的编码规范,包括UTF-8UTF-16等。

建议以后在创建新的项目、写代码的时候统一把IDE(eclipseNetBeans)工具的字符编码设置为UTF-8,这样比较通用一点。

不管有多少的字符集(字符编码),所有这些字符集必须要兼容ASCII,也就是0~127之间的字符,必须和ASCII重叠的。

 

 

四种表示形式

1.使用单引号包起来的一个字符

char c = '';

 

2.直接给char类型的变量赋予一个整数代表ASCII表内的字符

char c = 97; // a

 

3.使用转义符

\

//这里直接得到一个单引号字符。

char c = '\'';

// 得到一个 \

char c = '\\';

 

4.使用十六进制Unicode

char c = '\uAAAA';

// 小写字母a61是十六进制的97

char c = '\u0061';

 

 

1.1.4布尔

boolean

只有两个固定的值 truefalse

通常用于逻辑运算和比较运算。

 

三、数据类型转换

1.自动转换

低位给高位赋值,自动类型转换。所有的浮点,都比整数大得多!所以下列子左向右可以自动转换

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

char

eg.

byte b1 = 120;

// 首先把b1的值复制一份,然后转换为int类型,赋予给i1变量

int i1 = b1;

// 也会把副本转换为long类型,然后赋予给long

long L1 = b1;

 

2.强制转换

必须在等号的右边,使用一个(),里面写上要转换的目标类型。所有自动类型转换方向相反的,就需要强制转换。

eg.

int i1 = 120;

//无法自动转换,必须加上(byte)进行强制转换

byte b1 = (byte)i1;

//可以,先把i1转换为byte,然后再自动把byte转换为short,不建议使用

short s1 = (byte)i1;

 

3.表达式类型自动提升

3.1. 任何位数低于int的变量,和数字进行数学运算和位运算,结果都是int类型。

eg.

byte b1 = 5;

// 错误:因为等号右边的结果是int类型

byte b2 = b1 + 5;

// 正确:把b15先进行数学运算,然后强制类型转换为byte,最后赋予给b3

byte b3 = (byte)(b1 + 5);

 

3.2.在同一个表达式中,如果同时存在高位和低位的变量,结果类型是高位的

eg.

int i1 = 50;

long L1 = 100;

//等号右边返回的结果类型是long类型的

long L2 = i1 + L1;

 

3.3.任何类型的数值和浮点进行运算,结果一定是浮点

long L3 = 500;

float d1 = 4.5F;

// 因为d1float类型的浮点,和long类型的L3相加以后,结果是浮点

// 即使long的类型比float类型位数要高,但是浮点的范围更大

float f2 = L3 + d1;

 

3.4.任何类型的变量和String进行+操作,结果都是String

 

四、运算符

同一个计算式中运算顺序按照:括号,赋值,字符串连接运算符,数学运算符,比较运算符,逻辑运算符来进行。具体运算符的优先级参见下表

4.1赋值运算符

=

 

4.2字符串连接运算符

+

可以把字符串连接起来

eg.

String s1 = "abc";

String s2 = "def";

// s3 = "abcdef"

String s3 = s1 + s2;

System.out.println( s1 + s2 );// abcdef

 

int i1 = 123;

// 任何类型的数据,和String进行+操作,结果都是String类型

System.out.println( s1 + i1 ); // abc123

 

4.3数学运算符

操作数值型

+

-

*

/ : 除法 5 / 2 = 2

% : 求余数 5 % 2 = 1

java里面,这些数学运算符,可以和=组成"扩展后的赋值运算符"

+=

-=

*=

/=

%=

 

自加、自减:运算符在变量的前面,先执行自加或自减,再使用变量;运算符在变量的后面,先使用变量的值,再执行自加或自减。

 

 

++

--

 

int i1 = 10;

// i1 = i1 + 1;

i1 ++;

System.out.println( i1 );//11

 

// i1 = i1 - 1;

i1 --;

System.out.println( i1 );//10

 

 

System.out.prinltn( i1++ );//10

 

 

4.4比较运算符

操作数值(byteint...),返回boolean类型的值

>

<

==

!=

>=

<=

eg.

// b1 = false

boolean b1 = 5 > 10;

// b2 = true

boolean b2 = 5 < 10;

 

4.5逻辑运算符

操作boolean值,返回boolean类型的值

& : 有真必为真

| : 有假必为假

^ : 异或,运算符左右两边不同的时候,结果为true

! : 单目运算符,只有一个操作的数,运算的变量,只能在运算符的右边,对右边的值,进行取反。

!true = Not true = false

在使用&|的时候,建议使用短路运算符(&&||),可以提高性能,并且比较安全。

&& : 如果运算符的左边为false,那么右边的不会运算

|| : 如果运算符的左边为true,那么右边的不会运算

 

4.6位运算符

操作整数,直接操作变量的二进制数据

& :

| :

~ :

^ : 异或

>> : 右移一位,相当于除以2,符号位不变,左边补符号位

>>> : 右移一位,相当于除以2,符号位也一起移动

<< : 左移一位,相当于乘以2,右边补零

eg.

int i1 = 10;

i1 = i1 >> 2;//右移两位

System.out.println( i1 );//2

 

i1 = i1 << 2;

System.out.println( i1 );//8

 

重点

八种基本数据类型

逻辑运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值