一.java基本数据类型的转换
默认转换:容量小的类型默认转换成容量大的类型;byte,short,char-->int-->long-->float-->double;
byte,short,char他们三者之间不能相互转换,计算时会转换成int类型;
强制转换: 容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出。
boolean类型不能与其他七种类型进行转换;
再进行混合运算时,都会转换成容量最大的数据类型;
/*
基本数据类型之间转换
byte 1 short 2 int 4 long 8
float 4 double 8
char 2 虽然是字符,但是实际是unicode编码中的一个十进制整数 可以把他当做整数来对待
boolean 不能和其他其中类型进行转换 true false
转换规则
容量小的转容量大的
byte 1字节 127 -- short 2字节
容量大得转容量小的
int 4字节 129 --- byte 1字节
float是4字节,但是由于小数的二进制存储与整数二进制存储结构不同,
4字节的float大于4字节的int,大于8字节的long
byte->short->char->int->long->float->double
*/
public static void main(String[] args) {
//容量小的转容量大的 可以直接进行转换
byte a = 127;
int b = a;
long c = b;
float d = c;
//容量大得转容量小的
//大转小: 出现溢出
int m = 658;
byte n = (byte)m; //int --> byte 编译器不能通过
System.out.println(n);
float x = 10.5f;
//大转小: 精度损失
long y = (long)x;
System.out.println(y);
char z = 'a'; //97 char也是可以参与转换的
int zc = z;
byte aa = 10;
byte bb = 10;
byte cc = (byte)(aa+bb);//byte short,char 在混合运算时,都是上升为int类型
double dd = x + m + a + 5.5; //混合运算时,小类型默认都会转为最大的类型
}
2.条件语句
if语句
if(条件表达式){ 代码块 }
if(条件表达式){ 代码块 }else{ 代码块 }
if(条件表达式){ }else if(条件表达式)...else if(条件表达式){ }else{ }
public static void main(String[] args) {
int a = 10;
//语法支持 一行代码时,可以不用写{ }
if(a<5)
System.out.println("a>5");
System.out.println("a>5");
//此行代码是不在if控制范围内的,需要注意
}
switch语句
switch 与 if 语句比较类似, switch能够实现的功能,if语句都能实现
switch一般用于选择一些固定的选项,如一周有7天,一年有四季...
switch(表达式) 表达式的值只能是byte short char int 枚举 String类型
case后面只能是字面量,不能重复;
在case代码块中使用break语句终止流程,如果没有添加break,那么程序将会继续向下执行后面的case
public static void main(String[] args) {
/*
int a = 2;
switch(表达式 a){
case 字面量值 1 :
case对应的代码块
[break];可选的
case 2 :
case对应的代码块
.....
default:
默认代码块
}
*/
String a = "5";
// int b = 1;
switch (a){
case "1" :
System.out.println("case1");
break;
case "2":
System.out.println("case2");
break;
case "3":
System.out.println("case3");
break;
default:
System.out.println("输入的内容不合法");
}
}
3.循环
for循环
为了循环已知次数的情况,使用for循环
for(int i=0;i<10;i++){
循环体
}
for循环用于已知次数
for(变量的定义,只执行一次;进入循环的条件多次执行;变量的更新,多次执行){
循环体(多次执行)
}
public static void main(String[] args) {
for(int i=0;i<10;i++){
System.out.println("i="+i);
}
int i=0;
for(;i<10;i++){
System.out.println(i);
}
int i=0;
for(;i<10;){
System.out.println(i);
i++;
}
for(;;){
System.out.println("aaaa");
}//死循环
}
while循环和do while循环
public static void main(String[] args) {
while(true){
}//死循环
int a = 1;
while(a<10){
System.out.println(a);
a++;
}
System.out.println("a="+a);
char c = ' ';
do{
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个小写字母");
c = scanner.next().charAt(0);// charAt(0) 获取字符串的第0个位置的字符
}while('a'<=c&&c<='z');
}
public static void main(String[] args) {
/*
*****
*****
*****
*****
*****
*/
for (int i=0;i<5;i++){//外层循环,控制行数 外层循环执行一次
for(int j=0;j<5;j++){//内层循环 内层循环需要执行5次
System.out.print("*"); //println()会自动换行 print()不会自动换行
}
System.out.println();//换行
}
/*
*
**
***
****
*/
for(int i=1;i<=9;i++){
for (int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+(i*j)+" ");
}
System.out.println();
}
//outer 是为外层循环定义一个标签,标签名字可以自定义
outer:for (int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(j==3){
break outer;//在内层循环中,使用break语句,只能终止当前所在的循环,默认不能终止上一层循环
// break 某层循环的标签名
}
System.out.println("j="+j);
}
System.out.println("i="+i);
}
}
二、运算符
算术运算符:+,-,*,/,%,++,--;
比较运算符:>,<,==,>=,<=,!=;
逻辑运算符:!,&,|,&&,||;
赋值运算符:=,+=,-=,*=,/=;
条件运算符:(条件表达式)? 表达式1:表达式2;
位运算符
1.算术运算符
+ : 1.加法运算 数值+数值(char)
2.字符串连接 数值+字符串 字符串+字符串 == 字符串
- 数值-数值(char)
* 数值*数值(char)
/ 数值/数值(char)
%取余数 数值/数值(char)
++ 自增1 注意在混合运算时, ++在前先自增 ++在后,后自增
-- 自减1
public static void main(String[] args) {
int a = 10;
int b = 5;
char c = 'a';
String d = "a";
System.out.println(a+b);//15
System.out.println(a+c);//107
System.out.println(a+d);//10a 数值+(连接)字符串=字符串
/* int m = 5;
m++; //m = m+1
++m; //m = m+1
System.out.println(m);//7
*/
int m = 5;
System.out.println(m++);//5
System.out.println(++m);//6
int n = 5 + m++; //5+m值赋给了n 然后再自增1
System.out.println(n);//10
System.out.println(m);//6
int n = 5 + ++m; // 5+(++m) m先自增了 然后5+m(6) = 11
System.out.println(n);//11
System.out.println(m);//6
}
2.比较运算符
关系(比较)运算符: >,<,>= ,<=,==,!=
> < >= <= == != 都是用于数值(char)之间进行大小比较
== != 还可以使用于引用类型之间的比较
public static void main(String[] args) {
int a = 10;
int b = 5;
char c = 'a';
System.out.println(a>b);//true
System.out.println(a<b);//false
System.out.println(a>c);//false
System.out.println(a<c);//true
System.out.println(a==c);//false
System.out.println(a!=c);//true
String s1 = "abc";
String s2 = "abc";
System.out.println(s1==s2);//true
System.out.println(s1!=s2);//true
}
3.逻辑运算符
逻辑运算符: 符号的左右是逻辑值
& 逻辑与, && 逻辑与(短路与), | 逻辑或, || 逻辑或(短路或) , ! 逻辑非, ^ 逻辑异或
public static void main(String[] args) {
/*
& -- 逻辑与 所有的表达式都返回true,结果就是true, 其中有一个为false,结果就是false
逻辑与 第一个表达式结果为false时,后面的表达式仍会执行
&&-- 逻辑与(短路与)所有的表达式都返回true,结果就是true,其中有一个为false,结果就是false
&& 第一个表达式为false 后面的表达式就不会执行*/
int a = 10;
int b = 5;
int c = 8;
System.out.println(a>b && b<c);// true & true = true
System.out.println(a>b && b>c);// true & false =false
System.out.println(a<b && ++b>c);// false & false =false
System.out.println(b);//5,++b不会执行
System.out.println(a>b & b<c);// true && true = true
System.out.println(a>b & b>c);// true && false =false
System.out.println(a<b & (++b>c));// false && false =false
System.out.println(b);//6
System.out.println( 逻辑值 <=10);//java中不允许此写法
// int a = 5;
//System.out.println( 0 <= a && a<=10);
/*
| 逻辑或 所有的表达式中,只要有一个是true,结果就是true,全部为false,结果为false
如果第一个表达式为true,后面的表达式还会继续执行
|| 逻辑或(短路或) 所有的表达式中,只要有一个是true,结果就是true,全部为false,结果为false
如果第一个表达式为true,后面的表达式不会继续执行
*/
int a = 10;
int b = 5;
int c = 8;
System.out.println(a>b || b<c);// true | true = true
System.out.println(a<b || b>c);// false | false =false
System.out.println(a>b || ++b>c);// true | false true
System.out.println(b);//5,++b不执行
System.out.println(a>b | b<c);// true || true = true
System.out.println(a<b | b>c);// false || false =false
System.out.println(a>b | ++b>c);// true || false true
System.out.println(b);//6
int a = 10;
int b = 5;
int c = 8;
//逻辑非
// System.out.println(!(a>b));//!true --> false
//逻辑异或 相同为false, 不同为true
System.out.println(a>b ^ b<c); //true ^ true = false
System.out.println(a>b ^ b>c); //true ^ false = true
System.out.println(a<b ^ b>c); //false ^ false = false
}
4.赋值运算符
赋值运算符:=,+=,-=,*=,/=;
public static void main(String[] args) {
int a = 10; //= 把右边10赋给左边的变量 ,赋值时注意值的类型与声明的数据类型要匹配
System.out.println(a+=5); //a = a+5
byte s = 3;
s += 127; //s = (byte)(s+2) +=可以隐式的进行数据类型转换
s = s+3;//运算时会转换成int类型 int 类型不匹配
System.out.println(s);
}
5.条件运算符
条件运算符(三元运算符/三目运算符)
(条件表达式)?表达式1 :表达式2
先执行条件表达式,
当条件表达式值为true时, 运行表达式1
当条件表达式值为false时, 运行表达式2
最终表达式1和表达式2必须返回一个结果
public static void main(String[] args) {
int score = 80;
String result = (score >= 60) ? "及格" : "不及格";
System.out.println(result);
}
6.位运算
位运算: 指的是对数值的二进制位进行运算
<< 左移
>> 右移
>>> 无符号右移
&
|
^
~
public static void main(String[] args) {
int a = 4;
System.out.println(a << 1);// 0000 0100 左移1位 0000 1000 相当于乘2
System.out.println(a >> 1);// 0000 0100 右移一位 0000 0010 相当于除2
int b = -6;
System.out.println(b >> 1);//>> 1000 00110 1000 00011 带符号的移位 负数补1 正数补0
System.out.println(b >>> 1);//>>> 1000 0110 0100 0011 无符号的移位 无论正负都补0
}
public static void main(String[] args) {
int a = 3;
int b = 4;
/*
0000 0011
0000 0100
0000 0000 & 1&1 =1 1&0 0&0 = 0
*/
System.out.println(a & b);//0
/*
0000 0011
0000 0100
0000 0111 1|0 = 1 0|0=0
*/
System.out.println(a | b);//7
/*
0000 0011
0000 0100 ^ 0^0 1^1=0,1^0=1
0000 0111
*/
System.out.println(a ^ b);//7
/*
^可以用于数据交换
*/
int a = 3;
int b = 4;
a = a^b;//a=7;
b = a^b;//b=7^4=3
a = a^b;//a=7^3=4
System.out.println(a);//4
System.out.println(b);//3
//~ 0000 0011
// 1111 1100
System.out.println(~a);
}