java002
数据精度
从低向高排列:
byte short char int long float double
分配字节:1 2 2 4 8 4 8
【所以字节数和精度并不相同】
数据类型转换
自动类型转换(隐式)
特例注意:
前提:数据范围从小到大
强制类型转换(显示)
(类型名) 要转换的值;
注意事项:
1、强制类型转换一般不推荐使用,因为有可能发生精度损失、、数据溢出
2、byte/short/char 这三种类型都可以发生数学运算,例如加法
3、byte/short/char 这三种类型 在运算时,都会被首先提升为int类型,然后再计算
4、可以直接将 int 常量赋值给 byte、short、char 等数据类型,,但是要注意范围。原理是:javac编译器会自动的隐含地补上(byte)(short)(char)。如果超过范围,编译器会报错
5、boolean类型不能发生数据类型转换(不能转化为0,1!!!)
public class HelloWorld {
public static void main(String[] args) {
char zifu1='A';
System.out.println(zifu1 + 1); //结果是66,+1时,‘A’被转化成int
}
}
public class HelloWorld {
public static void main(String[] args) {
byte x = 40;
byte y= 50;
int z= x + y;
//这里计算时,x,y都被转化成了int型,所以是int+int 得出来的结果也是一个int型
//所以Z的前面只能是int,如果是byte,会报错
System.out.println(z);//结果是90
byte s=1+5;//等号右边全是常量,没有变量参与,编译之后得到的字节码文件相当于short result =13;
System.out.println(s);
}
}
ASCII编码表
0的ascii值:48
A的ascii值:65
a的ascii值:97
public class HelloWorld {
public static void main(String[] args) {
char x ='1';
System.out.println(x + 0);//X+0是加法运算,可以转变成int类型,由此得ascii值
}
}
编码表是数字和字符的对照关系表:
Ascii是美国信息交换标准代码
unicode是万国码,也是数字和符号的对照关系,开头0-127与ascii玛一样,但是从128开始包含有更多的字符,比如中文,韩文。。
运算符
-算术运算符
加 减 乘 除 取模(取余 %)
注意事项:一旦运算中由不同类型的数据,那么结果将会是数据量类型范围大的那种
运算步骤:int+double---->double+double----->double
加+的三种用法:
1、对于数值来说:加法
2、对于字符char来说,计算之前会被提升成int,再计算,对照关系就是unicode编码表
3、对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作
【任何数据类型和字符串进行连接的时候,结果都会变成字符串】
public class HelloWorld {
public static void main(String[] args) {
String x = "java";
System.out.println(x+20+30);//结果是java2030
System.out.println(x+(20+30));//java50
}
}
自增自减:
++num
num++
使用方式:
1、单独使用: 前++和后++没区别,num++和++num没差
public class HelloWorld {
public static void main(String[] args) {
int num1 = 10;
System.out.println(num1);//结果是10
num1++;
System.out.println(num1);//11
++num1;
System.out.println(num1);//12
}
}
2、混合使用:
A:如果是【前加加】,那么变量【立刻马上+1】,然后拿着结果进行使用 {先加后用}
B:如果是【后加加】,那么变量【使用变量本来的数值】,【然后再让变量+1】{先用后加}
public class HelloWorld {
public static void main(String[] args) {
int num2=20;
System.out.println(++num2);//21
System.out.println(num2);//21
int num3 =30;
System.out.println(num3++);//30,这种输出就是混合使用
System.out.println(num3);//31
}
}
注意:只有变量才能使用 自增自减运算符,常量不能发生改变。
[下例是用char型进行自增自减运算]
public class HelloWorld {
public static void main(String[] args) {
char num4='B';
int result1=--num4;
System.out.println(result1);//65
System.out.println(num4);//A
}
}
-赋值运算符
基本: int a=10;
复合: += -= *= /=
注意:经过复合赋值后,变量类型无变化
public class HelloWorld {
public static void main(String[] args) {
byte x=30;
x+=5;
//x=x+5
//byte + int---->int +int--->x=int
//复合赋值运算里,会隐含强制类型转换: x=(byte)int
System.out.println(x);
}
}
-比较运算符
注意事项:
1、比较运算符的结果一定是一个boolean值,成立就是true,不成立就是false
2、如果进行多次判断,不能连着写,程序中不允许【1<x<3】这种写法
-逻辑运算符
与(并且)&&
或(或者)||
非(取反)!
注意事项:
1、 && ||具有短路效果,如果左边已经可以判断得最终效果,那么右边的代码将不再执行
2、逻辑运算符只能用于boolean值
3、与、或两种运算符,如果有多个条件,可以连续写:
如:条件A && 条件B && 条件C
public class HelloWorld {
public static void main(String[] args) {
int a=10;
System.out.println(a<2 && ++a<100);//false
System.out.println(a);//10,说明++a没有实行
int b=20;
System.out.println(b<33 || ++b<100);//true
System.out.println(b);//20,说明++b没有实行
}
}
-三元运算符
一元运算符:只需要一个数据就可以进行操作的运算符。如:! ++ –
二元运算符:需要两个数据才可以进行操作的运算符。如:+ =
三元运算符:需要三个数据才可以进行操作的运算符
格式:
数据类型 变量名=条件判断 ? 表达式A :表达式B;
流程:
首先判断条件是否成立:
如果成立true,那么表达式A的值赋值给左侧的变量
如果不成立false,那么将表达式B的值赋值给左侧的变量
注意:
1、必须同时保证表达式A和表达式B都符合左侧数据类型的要求
2、System.out.println(a>b ? a:b);是正确写法,但是【a>b ? a:b;】单独写出来,结果压根不用,是不行的
public class HelloWorld {
public static void main(String[] args) {
int a=10;
int b=20;
int max = a>b ? a:b;
System.out.println("最大值是:"+max);//最大值是:20
}
}
1、必须同时保证表达式A和表达式B都符合左侧数据类型的要求
2、System.out.println(a>b ? a:b);是正确写法,但是【a>b ? a:b;】单独写出来,结果压根不用,是不行的
public class HelloWorld {
public static void main(String[] args) {
int a=10;
int b=20;
int max = a>b ? a:b;
System.out.println("最大值是:"+max);//最大值是:20
}
}