- JAVA学习
- java的一些数据类型和运算符
- 数据类型
- 整型变量/常量
- 浮点型变量/常量
- 字符型变量/常量
- 布尔型变量/常量
- 运算符(operator)
- 算数运算符
- 赋值及其扩展赋值运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 字符串连接符
- 条件运算符(三元运算符)
- 运算符的优先级问题
- 类型转化
- 自动类型转换
- 强制类型转换
- 转化中常见的问题
- 使用Scanner获取键盘输入
这是一篇自己目前学习java的一些笔记,主要就是根据尚学堂的java300集写的一些笔记。希望能给大家带来一些帮助,也是为了鞭策自己每天努力学习。有不对的地方希望提出然后更正。
java的一些数据类型和运算符 数据类型java中定义了3类8中基本数据类型
- 数值型: byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)
- 字符型:char(2字节)
- 布尔型:boolean(1位)
数据类型分为:基本数据类型:数值型,字符型,布尔型-
引用数据类型(用来引用对象,4个字节):类(class),接口(interface),数组
整型变量/常量含有:byte,short,int,long四类
long a = 7400000000L; 后面加L代表这是一个Long类型的常量
八进制:0开头,如:015
十六进制:0x开头 如0x15
二进制:以0b开头 如:0b01110011
浮点型变量/常量含有:float(单精度,精确到7个有效数字)
double(双精度)
java浮点类型常量有两种表示形式
- 十进制数形式 例如:3.14 314.0 0.314
- 科学记数法形式 例如 : 314e2 (e2代表10的2次方,即314x100) 314E-2 (即314x10的-2次方)
使用科学记数法赋值:
double f = 314e2; //即314*10^2 double f = 314e-2; //即314*10^-2 ---->3.14
float类型的数值要加后缀F,不加就默认为double类型的数值,在数值后加D可明确为double类型
float f = 3.14F; double d1 = 3.14; double d2 = 3.14D;
浮点数是不精确的,一定不要用于比较
例1:
float f =0.1f; double d = 1.0/10; System.out,println(f==d); //代码的运行结果会输出false
例2:
float d1 = 423432423f;
float d2 = d1+1;
if(d1==d2){
System.out.println("d1=d2");
}else{
System.out.println("d1!=d2");
}
//代码运行的结果会是“d1=d2”
想要比较浮点数,建议使用java.math包下面的两个类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点运算
示例:使用Bigdecimal进行浮点数的比较:
import java.math.BigDecimal;
public class Main{
public static void main(String[] args){
BigDecimal bd = BigDecimal.valueOf(1.0);
bd = bd.subtract(BigDecimal.valueOf(0.1)); //bd减0.1
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
System.out.println(bd); //0.5
System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1); //0.5000000000000001
BigDecimal bd2 = BigDecimal.valueOf(0.1);
BigDecimal bd3 = BigDecimal.valueOf(1.0/10.0);
System.out.println(bd2.equals(bd3)); //会返回true
}
}
字符型变量/常量
char类型用来表示在Unicode编码表中的字符,共65536个字符,即十六进制表示是从’u0000’到’uFFFF’,占2个字节,用单引号表示,如:‘A’
例:
char a = 'A'; char b = '中'; char c = 'u0061';
常见的 一些转义字符:
| 转义符 | 含义 | Unicode值 |
|---|---|---|
| b | 退格(backspace) | u0008 |
| n | 换行 | u000a |
| r | 回车 | u000d |
| t | 制表符(tab) | u0009 |
| 反斜杠 | u005c | |
| ’ | 单引号 | u0027 |
| " | 双引号 | u0022 |
boolean类型只有两个常量值,即true和false,在内存中占一位,不可以使用0或非0 常数代替true和false,常用来判断逻辑条件。
例:
boolean flag;
flag = true;
if(flag){
\true的分支
}else{
\false的分支
}
运算符(operator)
运算符大概分为:算术运算符,赋值运算符,扩展运算符,关系运算符,逻辑运算符,位运算符,条件运算符,字符串运算符等。
算数运算符-
二元运算符: +,-,*,/,%
二元运算符需要两个操作数完成运算
二元运算符运算规则:
整数运算:
- 两个操作数一个为long,则结果也为long
- 没有long时,结果为int
浮点运算:
- 两个操作数有一个为double,则结果为double
- 只有两个操作数都为float,结果才为float
取模运算
- 操作数可为浮点数,一般为证书,结果为“余数”,“余数”的符号和左边的操作数符号相同,如:7%3=1,-7%3=-1,7%-3=1.
-
一元运算符:++,–
该运算符只需要一个操作数即可运算。
常见的扩展赋值运算符:+=,-=,·*=,/=,%=
例:
int a = 3; int b = 4; a+=b; //相当于a=a+b a*=b+3; //相当于a=a*(b+3)关系运算符
关系运算符用来比较运算,关系运算的结果是布尔值:即true和false
常见关系运算符:==,!=,>,<,>=,<=
逻辑运算符常见逻辑运算符:
| 运算符 | 说明 |
|---|---|
| 逻辑与:& | 两个操作数都为true,结果为true |
| 逻辑或: | | 两个操作数有一个为true,则结果为true |
| 短路与:&& | 只要有一个为false,则直接返回false |
| 短路或:|| | 只要有一个为true,则直接返回true |
| 逻辑非:! | 取反,例:!true为false |
| 逻辑异或:^ | 相同为false,不同为true |
在实际使用的时候,通常使用&&和||,而不是&和|,因为这样会提高效率
位运算符| 位运算符 | 说明 |
|---|---|
| ~ | 取反 |
| & | 按位与(与:遇0则0) |
| | | 按位或(或:遇1则1) |
| ^ | 按位异或(异或:相同为0,不同为1) |
| << | 左移运算符,左移一位相当于乘2 |
| >> | 右移运算符,右移一位相当于除2取商 |
字符串连接符即 +
例:
String a = "123"; String b = "456"; System.out.println(a+b); //结果为123456条件运算符(三元运算符)
语法格式:
x?y:z
其中x为boolean类型的表达式,先计算x的值,若x的值为true,则整个运算的结果为表达式y的值,否则为z的值
例:
int score = 80; String score<60?"不及格":"及格"; //80>60,结果string的值是及格 int x = 1; System.out.println(x>0?1:(x==0?0:-1)); //因为x=1>0,所以结果输出1 //若x=0,输出0 //若x=-100,输出-1运算符的优先级问题
- 表达式里面优先使用小括号组织
- 逻辑非>逻辑与>逻辑或
自动类型转换
自动类型转化指的是容量小(范围大小)的数据类型可以自动转化为容量大的数据类型。
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低--------------------------------------------->高
byte,short,char-> int -> long -> float -> double
int 和long类型向float类型转化,long向double类型转化,会有精度损失
强制类型转换语法格式
(目标数据类型)x
示例:
double x= 3.14; int nx = (int)x; //此时nx的值就变为了3转化中常见的问题
注意:
- 操作数比较大的时候要注意是否溢出
- 尽量不要命名名字为l的变量,l和数字1容易混淆,long类型尽量使用大写L
import java.util.Scanner; Scanner scanner = new Scanner(System.in); String name = scanner.nextLine(); String favor = scanner.nextLine(); int age = scanner.nextInt();
接下来的内容会随着自己的学习进行更新。加油,奥力给!!!



