目录
一、数据类型和变量
1.字面常量
运行期间固定不变(eg. 1 ,'d' , "asdf" 等)
2.数据类型
数据类型:基本数据类型和引用数据类型。
2.1基本数据类型
四类:整型、浮点型、字符型和布尔型
八种:
类型 大小byte 类
byte 1 Byte
short 2 Short
int 4 Integer
long 8 Long
float 4 Float
double 8 Double
char 2 Character
boolean 没有规定 Boolean
2.2引用数据类型
String、数组等
2.3定义变量
public static void main(String[] args) {
byte a=1;
short b=2;
int c=10;
long d=10L;//or 10l 默认数字为四个字节
float e=1.0F;//or 1.0f 默认小数为双精度浮点型
double f=2.0;
char g='h';
boolean h=true;
}
2.4重点
*方法类变量一定要初始化(严格规范)。(而成员变量无需初始化 存在默认0值*boolean 默认false)
*包装类能找到对应的最大值最小值
System.out.println(Integer.MAX_VALUE);//最大值
System.out.println(Integer.MIN_VALUE);//最小值
*整型默认int 型,浮点数默认double型,
*char 类型c语言使用ASCII码,而java使用Unicode表示字符,占两个字节可以表示更多的字符,包括汉字。出现繁体等乱码,可以javac时加上-encoding UTF-8
eg. javac -encoding UTF-8 text.java
2.5类型转换
1.强制类型转换(显示转换)
大范围到小范围,且不同数据类型不能相互转换。
long a=10L;
int b=(int)a;
*会导致精度丢失,导致丢失数据
2.自动类型转换(隐示转换)
*数据小范围到大范围,eg int -> long
*初始化
byte a=10;
short b=20;
3.注意
运算会转换为该表达式最大的数据类型。
int a=10;
long b=20;
int c=a+b;//报错
int c=(int)(a+b);//可能成功
byte a=10;
byte b=10;
byte c=(byte)(a+b);//最小转换为int
2.6string类转换
int 、double等到string
int num=10;
String a=String.valueOf(num);
string 到int 、、、 parse
String a="100";
int b=Integer.parseInt(a);
二、运算符
算术运算符,关系运算符,逻辑运算符,位运算符,位移运算符及条件运算符等。
1.算术运算符
(1)基本的四则运算:(+ - * % /)
都是二目操作符,
*对于% or / 右操作数不能为0(算术异常)。/ 会向下取整,去掉小数部分。
*double 可以取模 % 但是无意义
*运算向类型范围大的先转换再计算
(2)增量运算符:(+= *= -= ...)
*只有变量使用,把操作结果赋值给左操作数。(具有强制类型转换)无需再次强转
char ch='a';
int b=0;
b+=ch;
(3)自增自减(++ --)
只有变量使用,分为前置和后置
前置先+1或-1,再执行其他操作(传参,运算,取值);
后置先执行其他操作再+1或者-1。
2.关系运算符
主要:== != > < <= >= ,计算结果true or false
*多次判断不能连续写 (1<a<3 error)
3.逻辑运算符
主要:逻辑与&& 逻辑或 || 逻辑非!结果都是boolean值
(1)&&
表达式1&&表达式2
表达式一为false就不判断表达式二,结果为false
表达式一为true二也为true时,结果才为true
(2)||
表达式1为true就不判断表达式二,结果为true
两表达式一个为true则结果为true
(3)!
!true -- false
!false-- true
比较 |按位或 &按位与
System.out.println(10>20&10/0==0);//程序抛出异常
System.out.println(10<20|10/0==0);//程序抛出异常
不会像|| && 短路,| & 会判断两个表达式
4.位运算符
主要:按位或| 按位与& 按位异或^二目运算符, 按位取反~ 单目
1byte 由八个二进制位组成
(1)按位与&
对应两个二进制位都是1取1,否则0;
(2)按位或|
对应两个二进制位有一个1取1,否则0;
(3)按位异或^
同 0 异 1;
(4)按位取反~
1->0 0->1
5.位移运算符
<< >> >>> 二目
操作补码
(1)左移<<
舍弃最左侧位,右侧补0
(2)右移>>
左侧补符号位 ,右侧舍弃 (符号位不变)
(3)无符号右移>>>
左侧补0
*位移一位跟2的次方相关
6.条件运算符
三目运算符
表达式?1:2;
表达式正确就取1,表达式错误取2
*不能单独存在,不被获取
*1,2类型必须相等,除非可以隐式转换
int a=10;
int b=20;
a>b?a:b;//error 未被接收
a>b?1:1.0;//类型不同
7.运算符的优先级
* /高于+ -
+ 高于>>
可能会导致运算出现歧义,所以尽量使用()括号来规范需要优先计算的式子