第一课 java数据类型与运算

1 java的数据类型

1.1 八大基本类型

1.1.1 整型

(1) byte
【1】范围:-2^7 ~ 2^7-1,即-128 ~ 127
【2】存储:8位,1字节
【3】表示:数字+B

(2)short
【1】范围: -2^15 ~ 2^15-1,即-32768 ~ 32767
【2】存储: 16位,2字节
【3】表示:数字+加S

(3)int
【1】范围:-2^31 ~ 2^31-1,即-2147483648 ~ 2147483647
【2】存储:32位,4字节
【3】表示:默认类型,数字

(4)long
【1】范围:-2^63 ~ 2^63-1,即-9223372036854774808 ~ 9223372036854774807
【2】存储:64位,8字节
【3】表示:数字+L

1.1.2 浮点型

(1)float
【1】范围:3.4e-45~1.4e38
【2】存储:32位,4字节,1位是符号位(0为正,1为负),8位是指数位,23位是尾数(+1位省略位),也就是小数部分,比如6.9这个浮点数在内存中的表示:
1】整数部分:就是不断的除以2取余数,然后将余数倒序排列,比如6的二进制
6/2=3 余 0
3/2=1 余 1
1/2=0 余 1
2】小数部分:不断的拿小数部分乘以2取积的整数部分,然后正序排列,比如0.9的二进制
0.92=1.8 取 1
0.82=1.6 取 1
0.62=1.2 取 1
0.22=0.4 取 0
0.42=0.8 取 0
0.82=1.6 取 1

6.9就是110.1110011001100…

3】填充尾数:左移两位,然后从小数点后,取23位有效数字,放到23位的尾数部分,小数点前面的1不存了,当指数位全部为0时省略的是0否则省略的是1

1.101110011001100…
4】填充指数:刚刚左移了两位,所以指数是2,按照规定指数位存放的是补码,要加上偏移量127+2=129
10000001
5】填充符号位:0
6】整体表示:0 10000001 10111001100110011001100

【3】表示:数字+F

(2)double
【1】范围:4.9e-324~1.8e308
【2】存储:64位,8字节,1位是符号位(0为正,1为负),11位是指数位,52位是尾数(+1位省略位),和float类似
【3】表示:默认类型,数字

1.1.3 布尔型boolean

(1)存储:只有true或者false两种值,存储方式可能1个字节或者4个字节
【1】1个字节
boolean数组,jvm编译后会使用1个字节的byte来表示每个元素,也就是字节数组

【2】4个字节
boolean值,jvm编译后会使用4个字节的int类型来表示

1.1.4 字符型char

【1】范围:0~65535
【2】存储:2字节,16位

1.2 引用数据类型

这里先简单介绍,后面再详细讲解

1.2.1 数组

(1)表示
类型【】 数组变量
或者
类型 数组变量【】

(2)初始化
1)动态初始化:程序运行的时候才分配内存空间
类型[] 数组变量;
数组变量 = new 类型[长度].
或者
类型[] 数组变量 = new 类型[长度]

2)静态初始化:程序在编译的时候就分配内存空间
【1】方法1
类型[] 数组变量;
数组变量= new 类型[]{值1,值2…}

或者

类型[]=数组变量= new 类型[]{值1,值2…}

【2】方法2
类型[] 数组变量 = {值1…},不能先声明后初始化,可以看成是方法1的简写版

1.2.2 类

(1)表示:可以自己定义,也可以使用类库
定义:class 类名
声明:类名 对象名

1.2.3 接口

(1)表示:可以自己定义,也可以使用类库
定义:interface 接口名
声明:接口名 对象名

1.3 数据类型转换

1.3.1 转换的方式

(1)自动转换(隐式转换)
【1】不用声明类型
范围大的数据类型 变量 = 范围小的数据

(2)强制转换
【1】要声明类型
范围小的数据类型 变量 = (范围小的数据类型)范围大的数据
【2】会发生精度损失

1.3.2 常见的转换原则

类型转换主要在在 赋值、方法调用、算术运算 三种情况下发生

1.3.2.1 基本类型转换原则
1.3.2.1.1 赋值和方法调用传值转换规则

从低位类型到高位类型自动转换;从高位类型到低位类型需要强制类型转换
(1)布尔型和其它基本数据类型之间不能相互转换;
(2)byte型可以自动转换为short、int、、long、float和double;
(3)short可自动转换为int、long、float和double;
(4)char可自动转换为int、long、float和double,不过是转换成对应的ascii
(5)int可自动转换为long、float和double;
(6)long可自动转换为float和double;
(7)float可自动转换为double;

(8)byte和char,short和char他们不会低位到高位自动转换,要进行强制转换
(9)高位转成地位的时候会,如果超过范围,会发生数值改变
比如整形转成浮点型,有时会发生精度损失,因为内存中的表示方式不一样
(10)直接数赋值,先通过直接数判断其类型,然后基本原则和上面谈到的赋值原则
基本一致;只是直接数是整数时特殊一点,当在可表示范围内时,可以直接赋值给
byte short char三种类型,比如byte = 10

1.3.2.1.2 算术运算转换规则

(1)所有的byte型、short型和char的值将被提升到int型

(2)如果一个操作数是long型,计算结果就是long型

(3)如果一个操作数是float型,计算结果就是float型

(4)如果一个操作数是double型,计算结果就是double型

(5)如果一个操作数是String型,计算结果就是String型

特殊情况:

(6)如采用+=、*=等缩略形式的运算符,系统会自动强制将运算结果转换为目标变量的类型。

(7) 当运算符为自动递增运算符(++)或自动递减运算符(–)时,如果操作数为byte,short或char类型不发生改变;

1.3.2.2 引用类型 转换原则

(1)基本类型 与 对应包装类 可自动转换,这是自动装箱和折箱的原理;

(2)两个引用类型间转换:
子类能直接转换为父类 或 接口类型;
父类转换为子类要 强制类型转换;且在运行时若实际不是对应的对象,会抛出ClassCastException运行时异常;

2 数据运算

2.1 算术运算

2.1.1 加(+)减(2)乘(*)除(/)

要遵守前面的算术运算转换规则。

2.1.2 取余运算%

常常用来处理周期问题。

2.1.3 ++ 与 --运算

a ++是先取a的值作为a ++的值,再执行运算,改变的是a的值,而不是a++的值;
++a是先取a的值进行运算,之后将结果给++a;–同理

2.1.4 ~按位取反

按位取反,比如5 = ~-6; 6=~-7
0000 0110 = 6
1111 1001
1111 1010 = -6
0000 0101 = 5

2.1.5 移位运算符

(1)<<:左移运算符,算数左移:不管符号位,也可以舍弃
按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃,不管符号),低位的空位补零。
如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,
实际上只移动了33%32=1位。
(2)>>:右移运算符,算数右移,符号位不变
按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
当右移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。
例如,如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为
正数,每一次右移都在左边补0,这叫做符号位扩展(保留符号位)(sign ex
tension ),在进行右移

注意:负数都是用补码表示的,右移使用的是补码,移完后要求源码才是结果
负数的的反码+1得到补码

比如:求 -123>>5的结果

原码—0111 1011
反码—1000 0100
补码—1000 0101 =-123
1000 0101>> 5
结果的补码:11111100=-4
结果的反码:11111011–补码减1
结果的补码:00000100–饭码按位取反,这是原码,对应4
由上可得,-123>>5 = -4

(3)>>>:无符右移,逻辑右移,无论正负数,高位都是补0,符号位当做数字来处理,1就是1,0就是0,只是高位都补0

比如求-8 >>>1的结果

00000000 00000000 00000000 00001000 = 8
11111111 11111111 11111111 11110111
11111111 11111111 11111111 11111000 = -8
01111111 11111111 11111111 11111100 = 2147483647-1-2=2147483640

-8>>1 = 2147483644

2.2 关系运算符

(1)常见的关系运算符

= < <= == != =;
(2)

==只比较值,===比较值和类型

2.3 逻辑运算符

(1)短路逻辑
第一个表达式能够确定整个表达式的结果,就不再执行第二个表达式了

(2)非短路逻辑
无论怎样都会执行所有表达式;在实际工作中常用短路逻辑,非短路逻辑会出现在面试和笔试环节

(3)逻辑运算符
【1】逻辑与
&和&&
【2】逻辑或
|和 ||
【3】非
!
【4】异或
^ ,按位运算,相同取0,不同取1

2.4 条件运算符

判断表达式? 赋值表达式1:赋值表达式2

2.5 重载运算符 +

是Java中唯一的“重载”的运算符,数学加法和字符串连接两种功能,按顺序,如果第一个+左边是字符串,后面的+都是字符串连接;如果第一个+左边是数字或者字符,先执行计算,直到遇到字符串的+,比如"abc"+‘1’+‘2’+‘3’=abc123; ‘1’+‘2’+‘3’+”abc”=150abc

3 程序结构

3.1 顺序结构

程序逐行执行,这种比较简单,不多讲

3.2 条件结构

(1)if
(2)if else
(3)if else if else
(4)switch case 语句
switch后的括号中的表达式应该是一个整数表达式,因此传递给switch和case语句的参数应该是byte,short, char或者int,分支比较多的时候,可以用

3.3 循环结构

3.3.1 经典for循环

(1)语法
for循环
1)经典的for循环常用于计次循环
2)for循环可以替代其他的循环结构
经典的for循环使用
for(初始化表达式(1);循环条件boolean(2);递增表达式(4)){
循环体(3)
}
(5)
流程:
(1)->[(2)->(3)->(4)]-[(2)->(3)->(4)]->(2)false->(5)结束
(1)只执行一次
(2)(3)(4)流程反复执行
(2)->false->结束流程

(2)continue
跳过本次循环,进入下个循环

(3)break
跳过整个for循环,也就是结束某一层for循环

(4)死循环
for( ; ; ){}

3.3.2 while循环

(1)语法
while循环
语法:
while(循环条件(1)){
循环体(2)
}
执行流程
[(1)-true->(2)]->[(1)-true->(2)]->(1)-false->结束

3.3.3 do while 循环

(1)语法
do…while循环结构
语法:
do{
循环体(1)
}while(循环条件(2)) ;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java封神之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值