2.数据类型与运算符
四、 Java数据类型
Java语言是强类型,每一个表达式或者变量都有一个在编译时就确定好了的类型,所有变量需要先声明后使用。
Java中数据类型包括 基本数据类型 和 引用数据类型(复杂数据类型)两大类
8种 数组、类、接口
★基本数据类型(4类8种)
◆整数类型:
类型 |
存储需求 |
取值范围 |
byte |
1字节 |
–128 到 127 |
short |
2字节 |
–32,768 到 32,767 |
int |
4字节 |
–2,147,483,648到 2,147,483, 647 (刚刚超过20亿) |
long |
8字节 |
–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
整形:没有小数部分的数值,可以是负数.
▶▶一般情况下int最常用,因此java中一个整形变量默认为int类型。长整形后面需要加一个后缀L或l (eg: long a = 1000L);
▶▶如果直接将一个较小的整数常量(在byte或short范围内的数据)赋给一个byte或short类型的变量,系统自动将该值当做byte或short类型变量来处理,如果系统使用一个巨大的数据,超过了int的范围,系统不会自动将该数据当做long类型处理,要想当成long类型处理必须在后面添加L或l
案例:
byte a = 56; //正确,系统会把56当做byte类型处理
short b = 56; //正确,系统会把56当做short类型处理
int c = 100; //正确,系统会把100当做int类型处理
long d = 100000000000000; //不正确,系统还是将100000000000000当做int类型处理,但是100000000000000已经超过类int类型能表示的范围,所以要想系统将100000000000000当做long类型,必须在后面加上L或l (long d = 100000000000000L)
练习1
◆浮点类型:
类型 |
存储需求 |
取值范围 |
float |
4字节 |
大约±3.40282347E+38F (有效位数6–7 位) |
double |
8字节 |
大约±1.79769313486231570E+308 (有效位数15 位) |
浮点类型:表示有小数部分的数值。
▶▶一般情况下double最常用,系统中浮点类型数据默认为double
▶▶float型的数值有一个后缀F或f,没有后缀的浮点数默认为double类型。
案例:
float a = 10.5;//报错,10.5系统默认为double类型,double类型范围比float大,所以直接将double类型数据给到float系统会报错,要想将10.5当做float类型处理,必须在后面添加f或F
double b = 10.5;
◆字符类型:
类型 |
存储需求 |
取值范围 |
char |
2字节 |
世界上所有书面语言字符包括26个英文字母、中文…… |
字符类型:用于表示单个字符,字符类型的值必须使用单引号括起来。
▶▶Java采用的Unicode编码,Unicode编码几乎支持世界上所有书面语言,也包括中文……
Eg:
char a = ‘男’;//a是一个字符类型变量,a的值是’男’
char b = ‘A’;//b是一个字符类型变量,b的值是’A’;
int c = 10;//c是一个整数类型变量,c的值为10
练习2
数据类型转换
Java中八中基本数据类型除了boolean类型外,都可以进行相互转换,有两种转换方式:
自动类型转换
强制类型转换
▼自动类型转换
条件:
类型兼容
目标类型的范围大于源类型的范围
Eg:
byte a = 12;//a是byte类型变量
int b = a;//自动类型转换
int a = 123;
double b = a;//自动类型转换
char a = ‘男’;
int b = a;//自动类型转换 (‘男’以Unicode码保存在电脑中的,此处可以得到他的unicode值)
▼强制类型转换
Eg:
int a = 12;
byte b = (byte)a; //强制类型转换
double a = 12.5;
int b = (int)a; //强制类型转换
注意:强制转换可能导致精度丢失或错误结果,所以不可随意滥用。
public class Test1{
public static void main(String[] args){
int a = 200;
byte b = (byte)a;//强制类型转换
System.out.println(a+" "+b);//200 -56(200超过byte范围得到错误结果)
double m = 12.5;
int n = (int)m;//强制类型转换
System.out.println(m+" "+n);//12.5 12(int只能保存整数,损失精度)
}
}
表达式中数据类型的自动提升
当使用二元运算符对两个值进行运算时,两个操作数会转换成通用类型。
î 如果两个操作数中有一个是double类型,则另一个将会转换成double型;
î 如果两个操作数中有一个是float类型,则另一个将会转换成float型;
î 如果两个操作数中有一个是long类型,则另一个将会转换成long型;
î 否则,两个操作数都转换成int型。
Eg:
public class Test1{
public static void main(String[] args){
int a = 10/3;
int b = (int)(10/3.0);//强制类型转换
double c = 10/3;//自动类型转换
double d = 10/3.0;
System.out.println(a);//3
System.out.println(b);//3
System.out.println(c);//3.0
System.out.println(d);//3.3333333
}
}
运算符
▼算术运算符
+、-、*、/、%(取模、取余)
▼自增自减运算符
++(自增)、--(自减)
案例一:
public class Test1{
public static void main(String[] args){
int a = 10;
int b = 10;
a++;// a = a+1;
++b;// b= b+1;
System.out.println("a="+a+",b="+b);//a=11,b=11;
}
}
分析:单独写a++或者++a时,都是相当于a=a+1.
▼关系运算符
>、>=、<、<=、==、!=
注意:==是判断相等,得到布尔值 true或false
=是赋值
▼逻辑运算符
&&(与)、||(或)、!(非)
▼位运算符
&(与)、|(或)、^(异或)
位运算将两个数转化成二进制再进行运算,
&按位求与,两位都为1才为1
| 按位求或,两位有一个为1就为1
^ 异或,两位不同才为1,两位相同就为0
案例:
▼赋值运算符
=
注意:==是判断相等,得到布尔值 true或false
=是赋值
补充:键盘输入
案例一:定义整数,求出他的平方值
案例一:从键盘输入一个整数,求出他的平方值
import java.util.*;//1.导包
public class Test1{
public static void main(String[] args){
int x,y;
Scanner s = new Scanner(System.in);//2.创建一个输入对象 s
System.out.print("请输入一个整数:");
x = s.nextInt();//3.键盘输入
y = x*x;
System.out.println(x+"的平方="+y);
}
}
案例二:从键盘输入两个整数,求出他的乘积。
import java.util.*;//导包
public class Test1{
public static void main(String[] args){
int a,b,x;
Scanner s = new Scanner(System.in);//创建键盘输入对象 s
System.out.print("请输入a的值:");
a = s.nextInt();//从键盘输入一个值给到a
System.out.print("请输入b的值:");
b = s.nextInt();//从键盘输入一个值给到b
x = a*b;
System.out.println(a+"*"+b+"="+x);
}
}
案例三:从键盘输入一个三位正整数,求出他的各位数的和
import java.util.*;
public class Test2{
public static void main(String[] args){
int x,gw,sw,bw,sum;
Scanner s = new Scanner(System.in);
System.out.print("请输入一个三位整数:");
x = s.nextInt();
gw = x%10; // 123%10=3
sw = (x%100)/10; // 123%100=23 23/10=2
bw = x/100; // 123/100=1
sum = gw+sw+bw;
System.out.println(x+"的各位数和="+sum);
}
}