java 数据类型&运算符
java数据类型&运算符
java数据类型分类
基本数据类型
byte(1byte=8bit)、char(2byte)、short(2byte)、int(4byte)、long(8byte)、float(4byte)、double(8byte)、boolean(true、false)
引用数据类型
数组、class、interface、reference……
整型
byte(1byte)、short(2byte)、int(4byte)、long(8byte)
-
byte范围:-128~127
-
声明long型变量,必须以”l”或“L”结尾
-
默认类型是:int型
int i = 10;
long l = 10L
浮点型 float(4byte)、double(8byte)
-
声明float型变量,必须以”f”或“F”结尾
-
默认类型是:double型
float f = 1,0f;
double d = 1.0;
字符型 char(2byte)
- char类型变量
char c = '';
char ch = 'a';
布尔型 boolean
-
只能赋值:true、false
-
常常在条件判断、循环结构中使用
boolean b1 = true;
boolean b2 = false;
变 量
变量定义格式
数据类型 变量名 = 变量值;
变量说明
-
变量必须先声明,后使用
-
变量定义在作用域内,在作用域内,它是有效的
-
同一个作用域内,不可以声明两个同名的变量
基本数据类型变量间运算规则
- 自动类型转换 byte、char、short、-->int-->long-->float-->double
【结论】:当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
- 强制类型转换
public static void main(String[] args){
int i =10;
byte b = (byte)i;
System.out.println(b);
}
【注意点】:强制类型转换,可能导致精度损失。
String与基本数据类型的运算
-
String属于引用数据类型,翻译为:字符串
-
声明String类型变量时,使用一对""
-
String可以和8种基本数据类型变量做运算,且运算只能是连接运算:+
-
运算的结果仍然是String类型
常 量(final关键字)
final int i = 10;
Java运算符
算术运算符: + - + - * / % (前)++ (后)++ (前)-- (后)-- +
- (前)++ :先自增1,后运算
? (后)++ :先运算,后自增1
- (前)-- :先自减1,后运算
? (后)-- :先运算,后自减1
- return --i;//先-1,后返回
? return i--;//先返回,后-1
- 连接符:+:只能使用在String与其他数据类型变量之间使用。
赋值运算符:= += -= *= /= %=
-
运算的结果不会改变变量本身的数据类型
-
开发中,如果希望变量实现+2的操作,有几种方法?(前提:int num = 10;)
方式一:num = num + 2;
方式二:num += 2; (推荐)
-
开发中,如果希望变量实现+1的操作,有几种方法?(前提:int num = 10;)
方式一:num = num + 1;
方式二:num += 1;
方式三:num++; (推荐)
比较运算符(关系运算符): == != > < >= <= instanceof
-
比较运算符的结果是boolean类型
-
>< >= <= :只能使用在数值类型的数据之间
-
== 和 !=: 不仅可以使用在数值类型数据之间,还可以使用在其他引用类型变量之间
Person p1 = new Person(1);
Person p2 = new Person(2);
boolean b1 = (p1 ==p2);//比较两个Person是否是同一个人(比较地址值),两个对象是否指向同一个内存空间,在堆空间中开辟了两个对象。//false
boolean b2 = (p1 != p2);//true
逻辑运算符:& && | || ! ^
- 逻辑运算符操作的都是boolean类型的变量,而且结果也是boolean类型
位运算符:<< >> >>> & | ^ ~
-
位运算符操作的都是整型的数据
-
<< :在一定范围内,每向左移1位,相当于 * 2
>> :在一定范围内,每向右移1位,相当于 / 2
三元运算符:(条件表达式)? 表达式1 : 表达式2
-
条件表达式的结果为boolean类型
-
根据条件表达式真或假,决定执行表达式1,还是表达式2.
如果表达式为true,则执行表达式1。
如果表达式为false,则执行表达式2。
-
表达式1 和表达式2要求是一致的。
-
三元运算符可以嵌套使用
4.1 凡是可以使用三元运算符的地方,都可以改写为if-else,反之,不成立。
4.2 如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符。
【原因】:简洁、执行效率高。
流程控制
if-else
@Test
public void test01(){
Scanner scan = new Scanner(System.in);
int score = scan.nexInt();
if(score == 100){
System.out.println("优秀!");
}else if(score > 80){
System.out.println("良好!");
}else if(score >= 60){
System.out.println("及格!");
}else{
System.out.println("不及格!");
}
}
switch-case
表达式:byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
public static void main(String[] args){
int option = 1;
switch(option){
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
break;
default:
System.out.println("other");
break;
}
}
do-while 循环
public static void main(String[] args){
int sum = 0;
int i = 0;
do{
sum += i;
i++;
}while(i<=100)
System.out.println(sum);
}
while 循环
public static void main(String[] args){
int sum = 0;
int i = 0;
while(i<=100){
sum += i;
i++;
}
System.out.println(sum);
}
for 循环
public static void main(String[] args){
int result = 0;
for(int i = 0; i<= 100; i++){
if(i%2 != 0){
result += i;
}
}
System.out.println("result" + result);
}
recursion 递归
public static void main(String[] args){
System.out.println(resursion(100));
}
public static void recursion(int val){
if(val == 1){
return 1;
}
return val + recursion(val-1);
}