小数
public class Demo03{
public static void main(String[] args){
//声明一个小数
double d = 3.12;
System.out.println(10/3.0);
//声明一个小数
float f = 3.12F;
System.out.println(f);
double num = 0.3;
System.out.println(num==(0.1+0.2));
//System.out.println(10/0);
System.out.println(10/0.0);
System.out.println(-10/0.0);
System.out.println(-0.0/-0.0==0.0/0.0);// NaN非数 一个自己和自己不相等
}
}
Tips:
计算机存储小数是一个近似值。
小数:
双精度: 符号 精确程度 空间
double 小数点后15-16位 8字节
单精度: 符号 精确程度 空间
float 小数点后6-7位 4字节
java中的小数默认类型是double,当把一个double类型的字面值
赋值给float变量存放的时候,要在字面值后加"F""f"
System.out.println(10/0.0); 正无穷
System.out.println(-10/0.0);负无穷
System.out.println(-0.0/-0.0==0.0/0.0);NaN
赋值
小数的赋值方式:
正常赋值:(最常用)
double d = 12.12;
科学计数法:
数值E/e 整数
代码
public class Demo02{
public static void main(String[] args){ // 正常赋值小数
double d = 12.1;
//d = .5;
d = 0.000314;
System.out.println("d的值是:"+d);
//通过科学计数法给d重新赋值
d = 3.14E-4;
System.out.println("d的值是:"+d);
}
}
逻辑型
/*
java规范 编写代码过程中要遵守的
jvm规范 虚拟机规范 hotspot boolean类型存储还是1和0
逻辑型 (布尔型)
符号 所占空间 范围
boolean 1位(实际存储的是1个字节) true/false
boolean 类型的变量不能参与四则运算
适用场景:
逻辑判定,流程控制中有大用
*/
public class Demo03{
public static void main(String[] args){
//声明一个boolean类型的变量
boolean flag = true;
System.out.println(flag);
//声明一个int类型的变量存放3和5的累加和
byte b = 3;
short s = 5;
int num = b+s+flag;
}
}
字符型
/*
字符型:
符号 空间 范围
char 2 0-65535
注意事项:
1:给char类型变量赋值时一定要注意是单引号引起来的单个字符。
2: '' 字符 "" 字符串 java中的字符串的类型是String
3: java采用unicode 可以使用中文
4:char类型是可以直接赋值整数的 包含0的正整数
5:char类型是可以参与四则运算的
6: 使用\ u + 十六进制数即可 (不常用)
7: 转义字符,
转变含义,在java中有些符号已经有了自己的用法,
通过转义字符,转变其含义。
\+要转义的字符
6、7 了解即可但是一定要记住转义字符。
*/
public class Demo04{
public static void main(String[] args){
//声明一个char类型的变量
char ch = 97;//将字符A赋值给了char类型变量ch存放
System.out.println(ch+1);
// java采用的是unicode u十进制的数
ch = '\u0011';
System.out.println("---"+ch+"---");
//输出'
ch = '\'';
System.out.println("---"+ch+"---");
//使用转义字符
ch = '\t';
System.out.println("---"+ch+"---");
System.out.println("abcdefgh\tigklmn");
System.out.println("abcdefghigklmn");
System.out.print("\n");
}
}
类型转换
自动转换:
boolean类型是不可以进行类型转换的
自动转换:
小变大
大类型 变量名 = 小类型的值;
char
|
byte->short->int->long->float->double
public class Demo06{
public static void main(String[] args){
//声明一个byte类型的变量
byte b = 12;
// 声明一个int类型的变量存放byte类型的数据
int num = b;//把变量b中的值赋值给int类型的变量num存放
//声明一个boolean类型的变量
boolean f = true;
//num = f;
//声明一个char类型
char ch = 'a';
num = ch;
System.out.println(num);
}
}
强制转换:
强制转换:(强转有风险,转换需谨慎)
大变小
小类型 变量名 = (小类型)大类型的变量;
如果大类型的变量的值超过了小类型的范围,结果有问题。
int num = 300;
//将int类型的值赋值给byte
byte result = (byte)num;
System.out.println(result);
运算符
常见概念
运算符:
int num = 3+5;
= + 都是运算符
运算符左右两边的内容称之为操作数
3+5 表达式
int num = 3+5; 语句 ;结尾称之为语句
算数
+号
+ 在java中一共有3种用途
1:正号
2: 加法运算
3:连接符号
// + 号左右两边的操作数只要有一个是字符串类型
// 那么+号的作用就是拼接作用,将+号左右两边的操作数 // 拼接为一个新的字符串。
public class Demo01{
public static void main(String[] args){
/*
+ 在java中一共有3种用途
1:正号
2: 加法运算
3:连接符号
*/
//声明一个变量
int num = +5+4;
System.out.println(num);
// + 号左右两边的操作数只要有一个是字符串类型
// 那么+号的作用就是拼接作用,将+号左右两边的操作数 // 拼接为一个新的字符串。
System.out.println("1+1="+(1+1));
}
}
-号
负号
减法运算
* / %
/**
针对1234分离每一位:
*
/ 10/3
%
1234%10 -> 4 个位 一个数对10取余数 获取到的就是最低位
1234/10 -> 123
*/
public class Demo02{
public static void main(String[] args){
int num = 10/3;// int类型计算之后的结果还是整数
System.out.println("结果是:"+num);
num = 10%3;
System.out.println("结果是:"+num);
//声明变量num = 1234
num = 1234;
//获取个位
int bit = num%10;
System.out.println("个位:"+bit);
//将1234 变为123
num = num/10;
//获取最后一位
bit = num%10;
System.out.println("十位:"+bit);
//123 变为12
num = num/10;
//获取最后一位
bit = num%10;
System.out.println("百位:"+bit);
//12 变为1
num = num/10;
System.out.println("千位:"+num);
}
}
自增 自减
自增++
自增1
当++是一条单独语句的时候,前加和后加一样 都是自增1 如果不是独立一条语句
前加: 先自增 再运算
后加: 先运算 再自增
自减--
自减1
和++相同 不过只是-1
单目运算符。
public class Demo03{
public static void main(String[] args){ //声明一个变量
int num = 10;
//自增
//num++;
num--;
System.out.println(num);
num = 10;
//自增
//++num;
--num;
System.out.println(num);
//将num归为10
num = 10;
//将num++的结果赋值给变量存储
int result = num++;//先运算 再自增
System.out.println("result="+result+",num="+num);
//num归为10
num = 10;
result = ++num;
System.out.println("result="+result+",num="+num);
//声明变量
int j = 10;
int k = 4;
result = j-- - k++ + ++k + k-- + ++j;
System.out.println("result="+result+",k="+k+",j="+j);
}
}
分析题:
关系
注意事项
比较基本数据类型
> < >= <=
比较基本数据类型和引用类型
== !=
关系运算符最后得到的结果是一个boolean值
代码:
public class Demo04{
public static void main(String[] args){
System.out.println(5<3);
//测试使用== !=
int num1 = 10;
int num2 = 20;
System.out.println(num1==num2);//比较相等
//声明两个字符串类型的变量
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2);//得到结果为true
//System.out.println(str1>str2);//编译报错
System.out.println(str1!=str2);
}
}
内存分析:
逻辑
注意事项
& | ! ^ && ||
1:逻辑运算符左右两边连接的操作数是一个boolean类型的值
2:& 左右两边操作数有一个为false,其结果就是false,如果都为true其结果才为true。
3:| 左右两边操作数有一个为true,其结果就是true,如果都为false其结果才为false。
4:! 取反
5:^ 相同为false 不同为true
6:&& || 称之为短路与和短路或,&&如果第一个操作数为false其结果就是false不会执行第二个操作数。 || 如果第一个操作数为true,整个结果就为true,不会执行第二个操作数
& | ^ 既是逻辑运算符也是位运算符
public class Demo05{
public static void main(String[] args){ // 通过一个运算符连接不是boolean
System.out.println("测试&运算符");
System.out.println(true&false);
System.out.println(true&true);
System.out.println(false&false);
System.out.println(false&true);
System.out.println("测试&&运算符");
System.out.println(true&&false);
System.out.println(true&&true);
System.out.println(false&&false);
System.out.println(false&&true);
System.out.println("测试|运算符");
System.out.println(true|false);
System.out.println(true|true);
System.out.println(false|false);
System.out.println(false|true);
System.out.println("测试||运算符");
System.out.println(true||false);
System.out.println(true||true);
System.out.println(false||false);
System.out.println(false||true);
System.out.println("测试!运算符");
System.out.println(!false);
System.out.println(!true);
System.out.println("测试^运算符");
System.out.println(true^false);
System.out.println(true^true);
System.out.println(false^false);
System.out.println(false^true);
}
}
代码例子
/**
模拟登录:
*/
public class LoginV1{
public static void main(String[] args){
//声明两个变量存放注册的信息
int regUname = 123;
int regPwd = 123;
//声明两个变量存放登录信息
int loginUname = 123;
int loginPwd = 234;
boolean flag = (regUname==loginUname) && (regPwd==loginPwd); System.out.println(flag);
}
}
获取键盘输入
/**
如何实现用户输入:
1:在当前类的头顶上编写如下代码:
import java.util.Scanner;
2: 在代码中编写如下代码: //只需要写一次
Scanner input = new Scanner(System.in);
3: 在上述信息编写完成之后,编写如下代码:
int num = input.nextInt();
*/
import java.util.Scanner;
public class LoginV2{
public static void main(String[] args){
//声明两个变量存放注册的信息
int regUname = 123;
int regPwd = 123;
//给用户提示信息
System.out.println("请输入用户名>>>>>");
Scanner input = new Scanner(System.in);//只需要写一次
int loginUname = input.nextInt();//获取用户键盘上输入的值
System.out.println("请输入密码>>>>>");
int loginPwd = input.nextInt();
//通过&&判定是否登陆成功
boolean flag = (regUname==loginUname)&&(regPwd==loginPwd); System.out.println(flag);
}
}
赋值和拓展
注意事项
扩展运算符:
+= *= /= %=
计算两个学生的分数之和 缺点:不利于阅读
优点:
简化代码量
提高编译速度
自动强转
代码
public class Demo08{
public static void main(String[] args){
//声明两个变量存放两个学生分数
int zhangScore = 120;
int liScore = 98;
//声明变量存放
int result = 0;
//result += zhangScore; //result = result + zhangScore; //result += liScore;//result = result + liScore;
result = result + zhangScore;
result = result + liScore;
System.out.println(result);
int num = 10;
byte b = 10;
// b =(byte)(b+num);
b += num;
System.out.println(b);
}
}
条件
注意事项
条件运算符:三目运算符
格式:
表达式1?表达式2:表达式3
首先计算表达式1 的值,永远只能是true或者是false
如果表达式1的值是true ,这个三目运算符的结果是表达式2的值。 如果表达式1的值是false,这个三目运算符的结果是表达式3的值
代码
public class Demo06{
public static void main(String[] args){
// 计算两个数的最大值:
//声明2个变量存放值
int num1 = 20;
int num2 = 30;
System.out.println(num1>num2);
//三目运算符
int max = 0;//num1>num2?num1:num2;
System.out.println("num1和num2中大的值是:"+max);
//计算三个数的最大值
int num3 = 26;
max = num1>num2?num1:num2>num3?num1>num2?num1:num2:num3; System.out.println("num1和num2,num3中大的值是:"+max);
}
}
常见面试题
/**
三目运算符中的面试题:
表达式中类型会自动提升
int num = 90>100?90.0:100;
System.out.println(num);
*/
public class Demo07{
public static void main(String[] args){ // 判定一个数字奇数还是偶数
int num = -1;
// 被除数-被除数/除数*除数
String str = num%2==1?"奇数":"偶数";
System.out.println(str);
}
}
位
运算符优先级:
运算符的优先级:
= 赋值最低 扩展运算符 条件
1:算数 > 关系 > 逻辑 > 三目 >赋值
2: 单目>双目>三目
3:加括号