Java是强类型的语言,数据的类型和保存数据的变量的类型必须一致。
一般情况下,小的数据可以放在大的变量中,JVM可以实现自动类型转换。 如果要把大的数据放进小的变量中,需要手动类型转换: 变量 = (变量类型)值;
public class TestConvert{
public static void main(String[] args){
//10 默认是int类型,把int类型的数据10放到byte类型的容器中了
int a=300; //
byte b=(byte)a; //把a 里面的值放到b容器中
System.out.println(b);
//自动把byte类型转成int类型
byte b1=10;
int b2=b1;
//把long类型转成Int类型
long l =10;
int l1=(int)l;
//把short类型强转成 byte类型
short s=20;
byte b4=(byte)s;
double d=10.6;
int mm=(int)d;
System.out.println(mm);
1.注意: 手动类型转换有可能会造成数据丢失! 大整型 小整型:抛弃高字节,保留低字节 浮点 整型:抛弃小数部分,保留整数部分 双精度浮点 单精度浮点:损失数据精度
2.不是所有类型都能手动类型转换。 boolean类型不能和其它基本类型互转
自动类型提升:两个数值参与运算,会发生自动类型提升。
规则: 参与运算的两个数值: 如果有double类型,运算结果为double类型,
否则: 如果有float类型,运算结果为float类型,
否则: 如果有long类型,运算结果为long类型,
否则: 运算结果为int类型。
//自动类型提升 byte n=10; byte n1=20; int n2=n+n1; //byte n2=(byte)(n+n1); // System.out.println(n2); short s1=10; short s2=20; int s3=s1+s2; double dd=10.1; float ff=10.2f; long mm1=20l; // System.out.println(ff+mm1);
数学运算符
+: 数学加法 -: 数学减法 *: 数学乘法 /: 数学除法 %: 求模(除法求余数)
例:
package com.studentwork; import java.util.Scanner; public class NianF { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int i=scanner.nextInt(); if (i%400==0){ System.out.println("闰年"); }else if (i%100==0){ System.out.println("平年"); }else if (i%4==0){ System.out.println("闰年"); }else { System.out.println("平年"); } } }
赋值运算符
=: 把右边的值赋给左边的变量
注意: 左边必须是变量,不能是表达式或常数。
- +=、-=、*=、/=、%=、……
- ++: 自增运算符
- --: 自减运算符
此类运算符不会发生自动类型提升
布尔运算符
==: 判断两边的值是否相等,相等则值为true,否则值为false
<、<=、>、>=、!=: 判断不等式是否成立
&、|既是位运算符,也是逻辑运算符,作用和&&、||相同。
&&、||是短路运算符
&、|是非短路运算符
短路运算:当一个子表达式的值能决定整个表达式的值时,后面的所有子表达式的值不再计算。
三元运算符
a ? b : c
规则:a为布尔表达式,b和c为同一类型的表达式或值,当a为true时,整个表达式的值为b的值,否则为c的值。
使用运算符连接的式子叫做表达式。
表达式的值的类型就是表达式的类型。
表达式可以嵌套。
所有运算可以使用圆括号提升运算优先级。
例:
package com.studentwork; import java.util.Scanner; public class SanY { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int a=scanner.nextInt(); int b=scanner.nextInt(); int c=scanner.nextInt(); System.out.println((a>b?a:b)>c?(a>b?a:b):c); } }
三、顺序语句
在Java中,使用分号表示一个语句结束
顺序语句:
赋值语句:给变量赋值
输入语句:把数据传入到Java虚拟机内部
输出语句:把Java虚拟机内部的数据传出
函数调用语句:执行一段特定的代码
Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); double d = scanner.nextDouble(); String s1 = scanner.next(); String s2 = scanner.nextLine(); scanner.close();
扫描器,输入数值,打印输出数值
例:输入一个偶数,哥德巴赫猜想
package com.mycode; import java.util.Scanner; public class Bdde { public static void main(String[] args) { int a,b,c; Scanner scanner=new Scanner(System.in); int d=scanner.nextInt(); if (d%2==0){ int count = 0; a=2; b=2; for( ; a <d;a++) { boolean flag = true; //假设是质数 for(int j = 2; j <= (int)Math.sqrt(a); j++) { //Math.squart()取平方根 if(a % j == 0) { flag = false; //改为不是质数 break; } } if(flag) { count++; b=d-a; for(; b<d;b++) { for(int j = 2; j <= (int)Math.sqrt(b); j++) { if(b % j == 0) { flag = false; break; } } if(flag) { count++; if (d == a+b){ System.out.println(d+"="+a+"+"+b); } } } } } }else { System.out.println("请输入一个偶数"); } } }
分支语句: 当某个条件满足时才执行某个代码块。
if语句:
在一个if语句中 if子句:有且仅有1个 else if子句:可以有0~n个 else子句:可以有0~1个
if ( 布尔表达式 ) {……}
// 第一个分支 else if( 布尔表达式 ) {……}
// 第二个分支 else if( 布尔表达式 ) {……} /
/ 第三个分支 else {……} // 第四个分支
switch语句:
switch语句表达式的类型: byte、short、int、char、java.lang.String、枚举类型 不能是boolean类型! case子句后面值的类型: 必须是常量或枚举值 不能是表达式!
可以有多个case子句
最多有一个default子句
case和default子句的顺序无关紧要
switch( 表达式 ) {
case 值1: ……
case 值2: ……
default: …… }
例:
package com.studentwork;
import java.util.Scanner;
public class ChengJ {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int i=scanner.nextInt();
if (i==100){
System.out.println("优");
}else {
int a=i/10;
switch (a){
case 9:
System.out.println("优");
break;
case 8:
System.out.println("良");
break;
case 7:
System.out.println("中");
break;
case 6:
System.out.println("及格");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
System.out.println("不及格");
break;
default:
System.out.println("错误");
}
}
}
}