02 Java基础语法(变量+数据类型+运算符)(下)

简介: 02 Java基础语法(变量+数据类型+运算符)

02 Java基础语法(变量+数据类型+运算符)(上):https://developer.aliyun.com/article/1580133

2.4 运算符
2.4.1 算数运算符

两个操作数进行计算

操作符 描述
+ 加、求和
- 减、求差
* 乘、求积
/ 除、求商
% 模、求余
int n1 = 10;
byte n2 =4;
System.out.println(n1/n2);  //2
//如果两个数字都是int整数,结果还是int整数
double r =n1/n2;
System.out.println(r); //2.0
double r1 =(double)n1/n2;
System.out.println(r1);  //2.5
System.out.println(5.2%3);  // 2.2
System.out.println(-5.2%3);  // -2.2
System.out.println(3%5);  //3  无法整除的,商0余3
System.out.println(6%10);  //  6
System.out.println(-6%10);  //  -6
System.out.println(5%-10);  //  5
System.out.println(1%10);  //  1
//4687,求各个位上数字的和25
    public static void main(String[] args) {
        int num = 4678;
        int ge = num%10;
        int shi = num/10%10;
        int bai = num/100%10;
        int qian = num/1000;
        int sum = ge +shi +bai +qian;
        System.out.println(sum);
    }
2.4.2 算数运算符:一元运算符

(只有一个操作数)

操作符 描述
++ 递增,变量值+1
- - 递减,变量值-1
int a = 3;int b = 4;
int c = (++b)*2-(a--)%4+(a++)*5-(--b)/2+(--a);
System.out.println(c);
// 10-3%4+10-2+2 =17
//b=5 a=2   a=3  b=4 a=2
int i =10;
i=i++; (int k = i++;i=k)
i=i++;
i=i++;
System.out.println(i); //10

笔试考点

public class Demo {
    public static void main(String[] args) {
        //笔试考点
        int a =10;
        int b = a ++;
        System.out.println("b = " + b); //ib = 10
        System.out.println("a = " + a); //ia = 11
        int c = ++a;
        System.out.println("c = " + c); //ic = 12
        System.out.println("a = " + a); //ia = 12
        System.out.println(a++ + ++a); //ia = 12+14=26
    }
}
2.4.3 赋值运算符

等号右边值赋值给等号左边的变量。

操作符 描述
= 直接赋值
+= 求和后赋值
-= 求差后赋值
*= 求积后赋值
/= 求商后赋值
%= 求余后赋值
//+=和+的区别
byte b = 127;
b+=1;  //输出-128  不会类型提升
b++; //输出-128  也不会类型提升
//b=b+1;  //编译不通过,会类型提升Incompatible types. Found: 'int', required: 'byte'

注意:运算后赋值(复合运算)的,不会自动类型提升(++ – += -= /= %= *=)

2.4.4 关系运算符

两个操作数进行比较,结果是一个布尔值(true / false)。

操作符 描述
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于

注意 float double 不要直接使用关系运算符比较(存储方式,精度丢失,近似存储,会出现误差)

用包装类double float提供的方法

2.4.5 逻辑运算符

两个boolean类型的操作数或表达式进行逻辑比较

操作符 语义 描述
&& 短路与(并且) 两个操作数,同时为真,结果为真
|| 短路或(或者) 两个操作数,有一个为真,结果为真
! 取反(非) 意为“不是”,真即是假,假即是真
int n1 =10;
int n2 =8;
System.out.println(n1<n2&&++n1>10);   //false &&短路与之后的不执行
System.out.println(n1);    //10 
System.out.println(n1>n2||++n1>10);   //ture ||短路或之后的不执行
System.out.println(n1);    //10 

前者false &&短路与之后的不执行

前者ture ||短路或之后的不执行

2.4.6 三元运算符

将判断后的结果赋,值给变量

操作符 语义 描述
? : 布尔表达式?结果1:结果2 当表达式结果为真,获得结果1当表达式结果为假,获得结果2
int java = 87;
String level = java>=90?"优秀":java>=80?"良好":"一般";
System.out.println(level);
//或者直接sout嵌套
int java = 92;
System.out.println(java>=90?"优秀":java>=80?"良好":"一般");
public class Demo {
    public static void main(String[] args) {
        //提示用户输入两个正整数并使用变量记录
        System.out.println("请输入两个整数");
        Scanner sc = new Scanner(System.in);
        int a =sc.nextInt();
        int b =sc.nextInt();
        //使用三目运算符找到最大值并打印
        int max = a > b ? a : b;
        System.out.println("最大值是 " + max);
        System.out.println("最大值是 " + (a > ib ? a : b));
    }
}
2.4.7 位运算符(详细见7种位运算符Markdown)

对数值类型数据进行按位操作;1表示true、0表示false。

操作符 语义 描述
& 按位与 二进制数据按位与操作
| 按位或 二进制数据按位或操作
~ 按位取反 二进制数据按位取反
^ 按位异或 二进制数据异或,相同为假、不同为真
>> 右移 二进制数据整体右移
<< 左移 二进制数据整体左移
>>> 无符号右移 二进制数据整体右移,符号位补0
public class Program {
    public static void main(String[] args) {
        int n1 = 6; //0000 0000 0000 0000 0000 0000 0000 0110
        int n2 = 11; //0000 0000 0000 0000 0000 0000 0000 1011
        System.out.println(n1&n2);  //2(0010)二进制数据按位与操作
        System.out.println(n1|n2);  //15 (1111)二进制数据按位或操作
        System.out.println(~n1);  //-7  即转换为1111111111111111111111111111111111111111111111111111111111111001按位取反(补码存储)
        System.out.println(n1^n2);  //13  (1101)按位异或,相同为假、不同为真
        
        int n11 = 5; //0000 0000 0000 0000 0000 0000 0000 0101
        int n22 = 7; //0000 0000 0000 0000 0000 0000 0000 0111
        System.out.println(n11&n22);  //5 (101)二进制数据按位与操作
        System.out.println(n11|n22);  //7 (111)二进制数据按位或操作
        System.out.println(~n11);  //-6  即转换为1111····1111 1010按位取反(补码存储)
        System.out.println(n11^n22);  //2  (010--2)按位异或,相同为假、不同为真
        //右移>>(相当于除2)左边补符号位
        int n3 = 20;    //二进制(1 0100)
        int n4=n3>>1;   //10(01010)  (最右右移1,最左补符号位,正数补0负数补1)
        int n5=n3>>2;   //5(101)
        int n6=n3>>5;   //0(移完了)
        int n7=n3>>32;  //32的倍数,不变
        //左移<<(相当于乘2)右边补0
        //无符号右移>>>(相当于除2)左边补0
        int n8 = 30;
        n8 = n8>>>1;  //15
        int n9 = -30;
        n9 = n9>>>1;  //2147483633
    }
}

右移>>(相当于除2)左边补符号位

左移<<(相当于乘2)右边补0

无符号右移>>>(相当于除2)左边补0

public class Program01 {
    //1.有一个整数8747,获取这个整数的二进制后四位
    //2.有一个整数8747,获取这个整数的二进制的第二个后四位
    public static void main(String[] args) {
        int x = 8747;
        //0010 0010 0010 1011
        System.out.println(x&0xF); //11
        System.out.println(x>>>4&0xF);//2
    }
}
//面试题:不使用第三个变量交换两个数字
public class Demo {
    public static void main(String[] args) {
        int x =10;int y = 20;
        //加减法;缺点,如果数据大可能会出现溢出
        x=x+y;
        y=x-y;
        x=x-y;
        //异或法
        x=x^y;
        y=x^y;
        x=x^y;
        System.out.println("交换后"+x+" "+y);
    }
}
2.4.7.1 字符串连接符:+

如果字符串和基本数据类型变量、常量连接以后,结果变成了字符串。

public class Demo1229 {
    public static void main(String[] args) {
        //提示用户输入一个正整数的秒数并使用变量记录
        //提示用户输入正整数类型的秒数,拆分秒数后输出x小时x分x秒
        System.out.println("请输入一个正整数的秒数:");
        Scanner sc=new Scanner(System.in);
        int num=sc.nextInt();
        //将正整数的秒数拆分为时分秒后并使用变量记录
        //3666秒 =>1小时 1分钟 6秒钟
        //3666 / 3600 = 1小时   3666%3600 =66 /60=1分钟 3666%60=6秒钟
        int hour = num /3600; //拆分小时
        int min = num % 3600 / 60; //拆分分钟
        int sec = num % 60; //拆分秒钟
        //打印最终的拆分结果
        System.out.println("小时:" + hour + ",分钟:" + min + ",秒钟:" + sec);
        System.out.println("--------------------------------------------------------------------");
        //+可以作为字符串连接,又可以作为加法运算符
        //只要+两边的操作数中有一个操作数是字符串类型,则该+就被当做字符串连接符处理
        System.out.println(hour + min +sec);  //8
        System.out.println(hour + min +sec+""); //8
        System.out.println(hour + min +""+sec);  //26
        System.out.println(hour + ""+min +sec); //116
        System.out.println(""+hour + min +sec); //116
        System.out.println(""+(hour + min +sec));  //8
    }

}
2.4.8 运算符优先级

以下从上往下,优先级由高到低

操作符优先级 结合性
[ ] ( ) { } 从左向右
! ~ ++ – -(负号) 从右向左
* / % 从左向右
+ - 从左向右
<< >> >>> 从左向右
< <= > >= instanceof 从左向右
== != 从左向右
& 从左向右
^ 从左向右
| 从左向右
&& 从左向右
|| 从左向右
?: 从右向左
= 从右向左

优先级:

()优先级最高,赋值=优先级最低,算数大于关系,关系大于逻辑,乘除大于加减,短路与大于短路非

综合性:

大部分运算符从左向右结合,单目、三目、赋值结合性从右往左结合

public class Demo1229 {
    public static void main(String[] args) {
        //单目 结合性
        int a = 10;
        int b = -~++a;
        int c = (-(~(++a)));
        System.out.println(b); //12
        System.out.println(c); //13
        //三目
        int java =88;
        String level1 =(java>=90?"优秀":(java>=80?"良好":"一般"));
        String level2 =java>=90?"优秀":java>=80?"良好":"一般";
        System.out.println(level2);
        //++ --优先级  JVM栈,临时变量,还是先运算++
        int num1 = 10;
        int num2 =num1++ ;
        System.out.println(num2);//10
        System.out.println(num1);//11
    }
}
2.4.9 表达式

表达式:使用运算符连接的变量或字面值,并可以得到一个最终结果

2.5 控制台录入

控制台录入指的是通过键盘输入数据与程序之间进行交互

程序运行中,可在控制台(终端)手动录入数据,再让程序继续运行。


导包语法:import 包名.类名; //将外部class文件的功能引入到自身文件中。


步骤:


导入Scanner类,import java.util.Scanner,


创建Scanner类型的变量(对象)


使用Scanner类的方法


.nextInt(); //获得整数


.nextDouble(); //获得小数


.next(); //获得字符串


.ext().charAt(0);//获得单个字符 char x = input.next().charAt(0);


如果输入了不匹配的数据,则会产生 java.util.InputMismatchException

//格式类型
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int age = input.nextInt();    //int
        System.out.println("请输入一个小数");
        double num = input.nextDouble();    //double
        System.out.println("请输入一个字符串");
        String name = input.next();   //String
        System.out.println("请输入一个字符");
        char x = input.next().charAt(0);    //字符串char
    }
}
//需求:控制台输入输出三门课程成绩,统计总分和平均分
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入java成绩");
        int java = input.nextInt();
        System.out.println("请输入sql成绩");
        int sql = input.nextInt();
        System.out.println("请输入html成绩");
        int html = input.nextInt();
        System.out.println("总成绩为" + (java + sql + html));
        System.out.printf("平均分是%.2f",(java + sql + html) / 3.0);//保留两位小数
        System.out.printf("平均分是:"+"%.2f",(java + sql + html) / 3.0);
    }
}
2.6 编码(补充)

tem.out.println(“请输入一个字符”);

char x = input.next().charAt(0); //字符串char

}

}


```java
//需求:控制台输入输出三门课程成绩,统计总分和平均分
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入java成绩");
        int java = input.nextInt();
        System.out.println("请输入sql成绩");
        int sql = input.nextInt();
        System.out.println("请输入html成绩");
        int html = input.nextInt();
        System.out.println("总成绩为" + (java + sql + html));
        System.out.printf("平均分是%.2f",(java + sql + html) / 3.0);//保留两位小数
        System.out.printf("平均分是:"+"%.2f",(java + sql + html) / 3.0);
    }
}
2.6 编码(补充)
目录
相关文章
|
29天前
|
Java
java do while 的语法怎么用?
java do while 的语法怎么用?
39 3
|
2月前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
38 1
|
2月前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。若需快速入门,建议查阅“简洁”系列教程。本文重点探讨Kotlin与Java共存的高级话题,包括属性访问、空安全、泛型处理、同步机制及SAM转换等,助你在项目中逐步引入Kotlin。
30 1
|
2月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
64 4
|
4月前
|
Java
【Java 第三篇章】注释、数据类型、运算符
【8月更文挑战第2天】 Java支持三种注释:单行(`//`)、多行(`/*...*/`)及文档注释(`/**...*/`)。它定义了八种基本数据类型,包括四种整数类型(`byte`、`short`、`int`、`long`),两种浮点类型(`float`、`double`),一种字符类型(`char`)和一种布尔类型(`boolean`)。数据类型之间可以自动转换或通过强制转换改变,但后者可能导致精度损失。Java中的运算符涵盖算术(如`+`、`-`)、赋值(如`=`)、比较(如`==`)、逻辑(如`&&`)和三目运算符等。例如,算术运算可用于执行基本数学计算,而逻辑运算符用于组合条件判断。
30 1
|
4月前
|
存储 Java
02 Java基础语法(变量+数据类型+运算符)(上)
02 Java基础语法(变量+数据类型+运算符)
52 4
|
7月前
|
Java 编译器
<JAVA> java入门面向0基础教程(数据类型,运算符)
<JAVA> java入门面向0基础教程(数据类型,运算符)
50 1
<JAVA> java入门面向0基础教程(数据类型,运算符)
|
6月前
|
Java 程序员 API
[笔记] 疯狂JAVA讲义(第3版)第3章 数据类型和运算符
[笔记] 疯狂JAVA讲义(第3版)第3章 数据类型和运算符
|
6月前
|
存储 Java
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
46 0
|
存储 Java 程序员
Java八种基本数据类型&字符串&运算符(图文详解)
Java基本类型共有八种,基本类型可以分为三类,字符类型char布尔类型boolean数值类型byte、short、int、long、float、double数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。 四种整型的特点 逻辑与的运算规则为:有一个运算数为假,其值为假,两个运算数都为真,其值为真。逻辑与的关系值表如下图所示 逻辑或的运算规则为:有一个运算数为真,其值为真,两个运算数都为假,其值为假。逻辑或的关系值表如下图所示。......
191 0