Java学习

一、赋值
赋值表达式, 左边一定是 变量 ,右边是 变量或者数值 , 变量与数值都有 类型 ,(数值里整数默认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类型的值
是值就必须得来接收: