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 编码(补充)
目录
相关文章
|
1月前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
187 2
|
2月前
|
存储 SQL NoSQL
Redis-常用语法以及java互联实践案例
本文详细介绍了Redis的数据结构、常用命令及其Java客户端的使用,涵盖String、Hash、List、Set、SortedSet等数据类型及操作,同时提供了Jedis和Spring Boot Data Redis的实战示例,帮助开发者快速掌握Redis在实际项目中的应用。
280 1
Redis-常用语法以及java互联实践案例
|
1月前
|
Java Go 开发工具
【Java】(2)Java数据类型阐述、基本数据类型的占用和范围、二进制的讲述
数据的一种表示形式。十进制表示满十进一原则。二进制表示满二进一原则。例如:十进制例如:二进制计算机在任何情况下都只能识别二进制。
115 1
|
2月前
|
安全 Java
使用Java多态性进行数据类型转换
以上示范了如何通过多态性来执行安全有效地对于Java对象间相互之间进行正确方式与场合下正确格式与条件限定内对于各个层级关系内部成员及其功能调取与应有操作处理过程,并通过 `instanceof`关键字确保了程序运行期间遵循逻辑合理并符合预设规则条件限定内正常工作流程而无需担忧潜藏风险问题出现可能带来影响结果质量问题情况存在可能。
113 12
|
2月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
138 1
|
3月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
3月前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
218 0
|
8月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
153 13
|
8月前
|
存储 传感器 缓存
java变量与数据类型:整型、浮点型与字符类型
### Java数据类型全景表简介 本文详细介绍了Java的基本数据类型和引用数据类型,涵盖每种类型的存储空间、默认值、取值范围及使用场景。特别强调了`byte`、`int`、`long`、`float`、`double`等基本类型在不同应用场景中的选择与优化,如文件流处理、金融计算等。引用数据类型部分则解析了`String`、数组、类对象、接口和枚举的内存分配机制。
284 15
|
存储 Java
02 Java基础语法(变量+数据类型+运算符)(上)
02 Java基础语法(变量+数据类型+运算符)
119 4
下一篇
oss云网关配置