目录
一、赋值
赋值表达式,左边一定是变量,右边是 变量或者数值,变量与数值 都有类型,(数值里整数默认int,小数默认double)
- 类型由小转大,存储空间变大,数据不会丢失,是安全的,在需要时 编译器会自动完成转化(隐式类型转化)
- 类型由大转小,存储空间变小,数据可能会丢失(丢字节),不安全,编译器不会自动完成转化,需要用户 手动完成转化(显式类型转化(强制类型转化))
赋值时,左右两边类型 一定要相同,最开始不相同的 通过隐式类型转化 或强制类型转化 转化成相同类型后 才能完成赋值,如果没有完成 同类型转化,编译器会报错
右边数值来赋时:
编译器会对数值大小 进行检查,数值大小 如果在左变量存储大小之内 够大,说明数值类型转化为此类型后 数值是不会丢失数据 装得下 是安全的,编译器会 自动完成 隐式类型转化,如果数值大小 超过了左变量存储大小,此变量装不下此数据,转此变量类型 一定会丢失数据,编译器不会自动完成转化,需要 手动强制类型转化 才可赋值
右边变量来赋时:
如果右变量存储大小 小于左变量存储大小,编译器会自动完成 隐式类型转换赋值;如果右变量存储大小 大于左变量存储大小,需要强制类型转换后 才可赋值
右边数值来赋值时,数值由默认的int类型 隐式转换为 byte类型时,类型由大转小,不会丢失数据?
- 数值的大小是确定的,最后有没有丢失数据 直接由数值大小来看的,不由它所属的类型来看
- 数值转换的判断 是基于确定的数值大小的,int隐式转换为byte时 就说明此int类型的数值此时的值 小于byte类型的存储范围,(不一定说数值所属的范围大 数值就大,比如long类型的数值可以是1),隐式转换时 是安全的,它是由数值的大小 直接确定安全转换的
- 所以 大类型转小类型 不一定会丢失数据,具体要看里面的数值 是否大,赋到的空间 是否够大,所以数值来赋时,编译器是可以直接判断的,不拘于 只能小类型赋到大类型,而如果变量来赋的话,编译器无法判断 变量里面具体放多大的值,值无法确定,所以拘于 只能小类型赋大类型 确保安全
二、运算
不同类型的数据 一起运算时,数据类型小的 会转换成数据类型大的 成同类型运算
最后进行的 同类型运算 至少是要在 4字节类型下的运算,比如byte与short 或byte与byte之间的运算,小的类型转成 和大的同类型后 还是小于4字节,会都被提升为 4字节运算
三、字符串
在C语言中,字符串 用指针变量或字符数组变量 来存放,没有专门的字符串变量,而Java中用String类型 专门存放字符串变量,属于 引用数据类型
String.valveOf(a):任意类型数据 转化为字符串
数据+"字符串"+数据:数据与字符串拼接,拼接成新字符串
+号是将两边的结果连接成字符串:
字符串转化为整型数据
Integer.valveOf:将int或字符串 转换为Integer
对象
Integer.parseInt:将字符串 解析为int基本数据类型
四、运算符
1.算术运算符(% += ++)
左右两边是数值,组成算术表达式,表达式整体结果是数值
%
当余数绝对值 小于除数绝对值时 便停下,此时的余数 便是取模的结果
11.5%2 == 1.5,-10%-3 == -1:
+=
+=时 如果左右两边类型不一样 运算符会帮我们直接强转
2.关系运算符 (==)
左右两边是数值,组成关系表达式,表达式整体结果是 boolean类型值
条件判断表达式的总结果 一定是true或false
if(布尔)、while(布尔)、for(i = 0;布尔;i++)
3.逻辑运算符(&& &)
左右两边是boolean类型值(关系表达式),组成逻辑表达式,表达式整体结果是 boolean类型值
- &&逻辑与 有短路效果:当第一个表达式为假时 直接判断此逻辑表达式为false,第二个表达式就不去判断执行了
- ||逻辑或 有短路效果:当第一个表达式为真时,第二个表达式 就不去执行判断了,逻辑表达式总结果为true
- &、| 无短路效果,两边两个表达式 一定都会去执行
4.位运算符(& | ~ ^)
左右两边是数值,组成 位运算表达式,表达式整体结构是 数值
位运算符都是 对数值二进制补码 操作
按位异或^:相同为0,不同为1,n^n=0,0^n=n
按位与&:n&1 得到该数二进制序列的 最后一位(0或1)
按位与&:n&(n-1),每与一次,表达式结果 相比n的二进制序列 都会少个1
5.移位运算符(<< >>>)
一边是 移位对象数值,一边是 整型移动位数,组成 移位运算表达式,表达式整体结果是 数值
移位操作对象是 数值二进制补码,一端掉,一端补
<<,左移n位,左端不要了 右端补n个0,效果是*2^n
>>,右移n位,右端不要了 左端补n个符号位,效果是/2^n
>>>,视为 无符号数 并右移,左端全补0,结果一定是正数(可能变成一个很大的正数)
(无<<<)
6.条件运算符(表达式1?表达式2:表达式3)
按 第一个表达式1 结果true或false 选择执行后面的 表达式2或表达式3,最后 整个三目表达式的结果是 执行其中一个表达式 结果的 数值
(Java中唯一的条件运算符、唯一的三目运算符)
第一个表达式的结果 必须是boolean类型的值
是值 就必须得来接收: