03.数据类型和运算符

03.数据类型和运算符

  • 数据类型
  1. 数据类型

Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间

数据类型分类

 

数据类型占用空间

 

 

数据类型

关键字

大小

取值范围

默认值

布尔型

boolean

1位

true,false

false

字节型

byte

1个字节(8位)

-128~127

0

短整型

short

2个字节(16位)

-2^15~2^15-1

0

整型

int

4个字节(32位)

-2^31~2^31-1

0

长整型

long

8个字节(64位)

-2^63~2^63-1

0

字符型

char

2个字节(16位)

0~2^16-1

'\u0000'

单精度浮点型

float

4个字节(32位)

1.4013E-45~3.4028E+38

0.0f

双精度浮点型

double

8个字节(64位)

4.9E-324~1.7977E+308

0.0

 

  1. 变量的作用域

1.作用域

变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。相同的作用域中不能定义两个同名变量。

2.初始化值

没有初始化值不能直接使用(可以定义时赋值,也可以使用前赋值)

在一行上建议只定义一个变量

可以定义多个,但是不建议

 

  1. 整数类型

Java 各整数类型有固定的表数范围和字段长度,其不受具体操作系统的影响,以保证Java程序的可移植性。

int是最常用的整数类型,所以一个Java整数常量默认就是int类型。声明long型常量推荐加‘ l ’或‘ L ’。另外推荐加L,因为l容易和数字1混淆。

java语言的整型常量默认为int型,声明long型常量可以后加'l'或'L',如:

int x = 600;

//正确  

long l = 2147483648L;

//必须加L否则出错

 

  1. 浮点类型

与整数类型类似,java浮点型有固定的范围和字段长度,不受具体的操作系统的影响,以保证java程序的可移植性.

java浮点型常量有两种表示形式

十进制形式 例如:314.0    0.314

科学计数法例如:3.14E2(3.14*10^2)  3.14E-2(3.14/(10^2))

java浮点型常量默认为double,如果声明一个常量为float型,则需在数字后面加f或F如:

double d = 12.3;//正确float f = 12.3f;//必须加f否则出错

 

  1. 布尔类型

boolean 类型适于逻辑运算,一般用于程序流程控制

boolean类型数据只允许取值true或者false,不可以0或者非0的整数替代true和false,这点和c语言不同.

用法举例

boolean b = true;

当我们学习判断语句或者循环语句的时候可以用到

 

  1. 字符类型

char型数据用来表示通常意义上"字符"

字符常量为用单引号括起来的单个字符,例如:char c = 123;char ch = '中';

java字符采用的Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示,例如:

char c1 ='\u51a9';  

//转义字符\u代表后面的四位数是十六进制的编码

注:Unicode是全球语言统一编码

java语言中还允许使用转义字符'\'来将其后的字符转为其他的含义,例如:

char c2 ='\n';//\n代表这换行

 

字符型常量有如下3种表示形式:

直接通过单个字符来制定字符型常量,如‘9’,‘a’

通过转义字符表示特殊字符型常量,如‘\n’

直接使用Unicode值来表示字符型常量,格式是‘\uXXXX’,XXXX表示一个十六进制的整数

 

char类型是可以进行运算的,因为它对应有Unicode码

 

常用转义符

转义字符

说明

Unicode表示方式

\b

退格符

\u0008

\n

换行符

\u000a

\r

回车符

\u000d

\t

制表符

\u0009

 

  1. 编码

1)ASCII字符编码

它是American Standard Code for Information Interchange的简称,表示美国信息互换标准代码,是为罗马字母编制的一套编码.它主要用于表达现代英语和其他的西欧语言中的字符.ASCII实际只用了一个字节的7位,一共能表示128个(2^7)字符

2)ISO-8859-1

又称为Lantin-1,是国际标准化组织(ISO)为西欧语言中的字符制定的编码,它用一个字节(8位),来为字符编码,与ASCII字符编码兼容.所谓兼容就是指对于相同的字符,它的ASCII字符编码和ISO-8859-1字符编码相同

3)GB2312字符编码

它包括对简体中文的编码,一共收录了7445个字符,包括6763个汉字和682个其他符号,它与ASCII码兼容

4)GBK字符编码

它是对GB2312的扩展,收录了21886个字符,它分为汉字区和图形符号区.汉字区包括21003个字符.GBK与GB2312兼容

5)Unicode字符编码

由国际Unicode协会编制,收录了全世界所有的语言文字中的字符,是一种跨平台的字符编码.Unicode有两种方案:

第一种用两个字节(16位)编码,采用这种方案的字符集被称为USC-2,java就是采用两个字节的编码方案

第二种用四个字节(32位)编码(实际上只用了31位,最高位必须是0),采用这个编码方案的字符集被称为UBS-4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 数据类型转换
  1. 自动转换

 

自动类型转换(也叫隐式类型转换)  

强制类型转换(也叫显式类型转换)

boolean类型不能转换为其他的数据类型,因为只有true和false

byte,short和char相互之间不转换,他们参与运算首先转换为int类型

 

 

自动类型提升

byte b = 3;

int x = 4;

x = x + b;//b会自动提升为int类型进行运算。

 

b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。

b=b1+b2不可以,是因为b1和b2是变量,因为变量的值会变化,不确定具体的值,所以默认使用int类型进行存储。

 

 

  1. 强制转换

目标类型 变量名=(目标类型)(被转换的数据);

强制类型转换

byte b = 3;

b = b + 4;//报错

b = (byte)(b+4);//强制类型转换,强制将(b+4)的结果转换为byte类型,再赋值给b。

 

看看下面两个定义有没有区别呢?

float f1 = (float)12.345;

float f2 = 12.345f;

 

f1其实是通过一个double类型转换过来的。

而f2本身就是一个float类型

 

byte b1=3,b2=4,b;

b=b1+b2;

b=3+4;

哪句是编译失败的呢?为什么呢?

b1+b2是int类型

  • 算术运算符
  1. 算数运算符

运算符

运算

范例

结果

+

正号

+3

3

-

负号

b=4;-b

-4

+

5+5

10

-

6-4

2

*

3*4

12

/

5/5

1

%

取模

5%5

0

++

自增(前,后)

a=2,b=++a

a=3;b=3

--

自减(前,后)

a=2,b=a--

a=1;b=2

+

字符串相加

"He"+"llo"

"Hello"

 

+的几种作用:

加法

正数

字符串连接符(输出“hello”+'a'+1 和  'a'+1+“hello”)

除法的时候要注意一个问题:

整数相除,只能得到整数

要想得到小数,可以*1.0,得到的却不是真正的小数值

 

  1. 表达式类型的自动提升

当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。提升规则:

1.所有的byte,short,char类型都将被提升到int类型

2.整个算术表达式的数据类型自动提升到表达式中最高等级操作数同样的类型。

 

  1. 运算符的区别

1./和%的区别

注意:小数做被除数,整除0结果为Infinity(无穷大),对0取模结果为NaN(not  a number非数)

2.++和--的应用

单独使用效果相同

参与运算使用,在操作数的前后效果不同

 

  1. java语言优先级(比如括号可以改变谁先运算)

例:int a = 4;

int b = (a++)+(++a)+(a*10);

引出运算符的优先级

 

总结:

++放在数的右边,先运算后增加1

++放在数的左边,先加1后运算

--放在数的右边,先运算后减1

--放在数的左边,先减1后运算

自加和自减只能用于操作变量,不能用于操作数值直接量或常量。如5++

 

  • 赋值运算符
  1. 符号:

= , +=, -=, *=, /=, %=

=为基本的赋值运算符,其他的为扩展的赋值运算符

如下操作写出结果

int a,b; a = b = 10;

System.out.println(a); System.out.println(b);

输出

10

10

 

int a = 10; a += 20; System.out.println(a);

面试题

short s=1, s = s+1; (s = s +1;)

short s=1, s+=1;(s = (short)(s+1))

上面两个代码有没有问题,如果有,那里有问题

s = s+1;s+1:类型自动提升为int类型

(s = s +1;):没有将运算结果赋值给一个变量

s+=1不会进行数据类型的转换

(s = (short)(s+1)):没有将结果赋值给变量,所以不成立

 

  1. X=运算符

+=:对于x+=y;即对应于x=x+y;

-=:对于x-=7;即对应于x=x-7;

*=:对于x*y;即对应于x=x*y;

/=;对于x/y;即对应于x=x/y

%=;对于x%y;即对应于x=x%y

 

  • 比较运算符
  1. 比较运算符

 

运算符

运算

范例

结果

==

相等于

4==3

false

!=

不等于

4!=3

false

<

小于

4<3

false

>

大于

4>3

true

<=

小于等于

4<=3

false

>=

大于等于

4>=3

true

instance of

检查是否是类的对象

"hello" instanceof String

true

 

注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。

注2:比较运算符"=="不能误写成"=" 。

 

 

  • 逻辑运算符
  1. 逻辑运算符

运算符

运算

范例

结果

&

and(与)

false & true

false

|

or(或)

false | true

true

^

xor(异或)

true ^ false

true

!

not(非)

! true

false

&&

and(短路)

false && true

false

||

or(短路)

false ||true

true

 

逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。

 

“&”和“&&”的区别:

单&时,左边无论真假,右边都进行运算;

双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。


异或( ^ ):当左右一样时,结果为false。其他情况均为true

2.位运算符

位运算符就是对二进制就行运算

运算符

运算

范例

<<

左移

3<<12=12  3*2*2=12

>>

右移

3>>1=1 3/2=1

>>>

无符号右移

3>>>1=1 3/2=1

&

与运算

6 & 3 = 2

|

或运算

6 | 3 =7

^

异或运算

6 ^ 3=5

~

反码

~6=-7

 

位运算符细节

<<

空位补0,被移除的高位丢弃。

>>

被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,最高位补1。

>>>

被移位二进制最高位无论是0或者是1,空缺位都用0补。

&

任何二进制位和0进行&运算,结果是0;和1进行&运算结果是原值。

|

任何二进制位和0进行 | 运算,结果是原值;和1进行 | 运算结果是1。

^

任何相同二进制位进行 ^ 运算,结果是0; 不相同二进制位 ^ 运算结果是1。

 

3.三元运算符

 

1.格式

(关系表达式)?表达式1:表达式2;

如果条件为true,运算后的结果是表达式1;

如果条件为false,运算后的结果是表达式2;

2.示例:

获取两个数中大数。

int x=3,y=4,z;

z=(x>y)?x:y;//z变量存储的就是两个数的大数

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值