数据类型
1.基本类型(八个)
数值型{
整型类型
-
byte型:1字节 8bit位 第一位是符号位
byte a = 127;
-
short型:2字节
short b = 32767;
-
int 型:4字节
int c = 123; int c = 0b123;//二进制 int c = 0123;//八进制 int c = 0x123;//十六进制
-
long型:8字节
long d = 123l; long d = 123L;//数字后缀L或l
0b或0B开头数字 为二进制
0开头数字为 八进制
0x或0X开头为16进制
浮点类型
-
float :4字节
-
单精度,尾数可以精确到7位有效数字
float e = 123.4f//数字后缀加f或F
-
double: 8字节
-
双精度,精度是float的两倍。通常采用此类型。
double f = 123.4
%%java浮点型默认为double类型%%
-
十进制数形式,例如: 3.14 314.0
-
科学记数法形式,如 3.14e2 3.14E2
-
}
字符型 (char)2字节
逻辑型(boolean)
2.引用类型
String类型(字符串)
-
'+'相当于字符串连接符
-
String s = “abcd”;
-
1.任意八种基本数据类型的数据与String类型只能进行连接“+”运算(字符串连接),且结果一定也是String类型
-
2.String类型不能转为其他的基本类型
-
String a = "hello"; String b = "world"; String c = a + b; String d = a + b + 12; System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d);
运行结果:
hello world helloworld helloworld12 Process finished with exit code 0
接口(interface)
判断左边类型是否与右边类型一致
package homeworkday7.chouxiang;
public class Test {
public static void main(String[] args) {
Cuiweiyang dqw=new Dengqinwen();
Cuiweiyang dqw2=new Dengqinwen2();
Person zs = new Person();
dqw.sleep();
dqw2.sleep();
Dengqinwen dqw3=(Dengqinwen) dqw;
zs.feed(dqw3);
}
}
package homeworkday7.chouxiang;
public class Person {
public void feed(Cuiweiyang cuiweiyang){
cuiweiyang.eat();
if(cuiweiyang instanceof Dengqinwen){//判断cuiweiyang是否与Dengqinwen是一个类型
System.out.println("转换为Dengqinwen成功!");
}
}
}
结果就是转换为Dengqinwen成功!
数组([])
基本数据类型的转换
八种基本类型除了boolean类型以外,其他七种类型之间可以相互转化
转换规则:
1.默认转换
将取值范围小的的类型自动提升为取值范围大的类型
(byte,char,short(byte->short))->(int)->(long)->(short)->(double)
4个字节float比8个字节long取值范围要大
原因: 浮点数在存储时结构与整数计算方式不同
2.强制转换
容量大的转换为容量小的
格式 : (强制转换的类型) 变量名
int a =258;
byte b = (byte)a;
注:有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一 种数据类型,然后再进行计算
算术运算
分类 | 运算符 |
---|---|
算数运算符 | * / + - % ++ – |
赋值运算符 | +=, -=, /=, *=, %=(扩展赋值运算符), = |
比较(关系)运算符 | == != > <= >= instanceof |
逻辑运算符 | |
位运算符 | |
条件运算符 | (条件表达式)? 表达式1:表达式2 |
算数运算符
1.‘+’
- 表示正数
- 进行加法运算(数值+数值,数值+‘字符’,‘字符’+‘字符’)
- 连接作用 (字符串+字符串,字符串+数值…字符串+其他)=字符串
2.‘-’
- 表示负数
- 减法运算(数值-数值,数值-‘字符’,‘字符’-‘字符’)
- 注:字符串没有减法
3.‘*’
4.‘/’
5.‘++’
++数值:先++再赋值y=x++ +3;//x+3
数值++:先赋值再++y=++x+3;//x+1+3
6.‘–’
7.‘%’
两边为整数
与++同理
赋值运算符
short s = 3;
s=s+2; ①会出错,因为2为int型
s+=2; ②是对的,+2后会进行隐式转换为s对应的数据类型
/= ,*=,-=,%=同理
注:两边数据类型必须一致
比较运算符(结果为true与false)
1.‘==’
判断两边数值是否相等(基本类型与基本类型),Boolean与Boolean进行比较,String与String进行比较(引用类型与引用类型),
注意 字符串自己不能比较大小,Boolean与Boolean不能比较大小
2.‘!=’
数值!=数值,bool!=bool,string!=string;
3.‘>‘和’<’
数值与数值,字符与数值,字符与字符
4.‘>=‘与’<=’
与3同理
5.instanceof
判断左边类型是否与右边类型一致
package homeworkday7.chouxiang;
public class Test {
public static void main(String[] args) {
Cuiweiyang dqw=new Dengqinwen();
Cuiweiyang dqw2=new Dengqinwen2();
Person zs = new Person();
dqw.sleep();
dqw2.sleep();
Dengqinwen dqw3=(Dengqinwen) dqw;
zs.feed(dqw3);
}
}
package homeworkday7.chouxiang;
public class Person {
public void feed(Cuiweiyang cuiweiyang){
cuiweiyang.eat();
if(cuiweiyang instanceof Dengqinwen){//判断cuiweiyang是否与Dengqinwen是一个类型
System.out.println("转换为Dengqinwen成功!");
}
}
}
逻辑运算符
1.& 逻辑与
所有表达式结果为true,结果为true ,否则false
特点:当第一个表达式为false时,还会去继续执行第二个式子
2.&& 逻辑与/短路与
所有表达式结果为true,结果为true ,否则false
特点:当第一个结果为false时,不会再继续执行第二个式子
int a=1;
int b=2;
int c=3;
System.out.println(a>b&(b++)>c);
System.out.println(b);
b=2;
System.out.println(a>b&&(b++)>c);
System.out.println(b);
false
3
false
2
3.| 逻辑或
当所有表达式结果为false,结果为false,否则为true
特点:当第一个表达式为true时,还会去继续执行第二个式子
4.|| 逻辑或/短路或
当所有表达式结果为false,结果为false,否则为true
特点:当第一个表达式为true时,不会去继续执行第二个式子
int a=1;
int b=2;
int c=3;
System.out.println(a<b|(b++)>c);
System.out.println(b);
b=2;
System.out.println(a<b||(b++)>c);
System.out.println(b);
true
3
true
2
5.! 逻辑非
!true = false,!false = true;
6.^ 逻辑异或
相同为false 不同为true
条件运算符
(条件表达式)? 表达式 1 : 表达式2
若 条件表达式 为true 去执行表达式 1 ,否则执行表达式 2;
位运算符
1.<< 左移
空位补0,被移除的最高位丢弃,空缺位补0
int a=7;
int b=4;
System.out.println(b<<2);
//0000 0100 4
//0001 0000 16
2.>> 右移
被移位的二进制最高位是0,右移后,空缺位补0,最高位是1,空缺位补1
int b=4;
System.out.println(b>>2);
//0000 0100 4
//0000 0001 1
3.>>> 无符号 右移
被移位二进制最高位无论是0还是1,空缺位都用0补
正数
int b=4;
System.out.println(b>>>2);
//0000 0100 4
//0000 0001 1
负数
int b=-4;
System.out.println(b>>>2);
/*
0111 1111 1111 1111
1111 1111 1111 1110 -4
*/
/*
0111 1111 1111 1111
1111 1111 1111 1110 1073741823
*/
4.& 与
对应两位都为1,则结果为1,否则0
int a=2;
int b=4;
System.out.println(a&b);
/*
0000 0010 2
0000 0100 4 &
0000 0000
*/
5.^ 异或
对应两位都相等,则结果为0,否则1
int a=2;
int b=4;
System.out.println(a^b);
/*
0000 0010 2
0000 0100 4 ^
0000 0110
*/
6.| 或
对应两位都为0,则结果为0,否则1
int a=2;
int b=4;
System.out.println(a|b);
/*
0000 0010 2
0000 0100 4 |
0000 0110
*/
7.~ 非
对所有位取反 1~0 0~1
int a=2;
int b=4;
System.out.println(~a);
/*
~0000 0010 2
1111 1101 -3(最高位为1)
*/
注:使用byte类型移位时,系统会自动换为int进行位运算
控制台输入
import java.util.Scanner;
public class BasicType {
public static void main(String[] args){
Scanner in = new Scanner(System.in);//Scanner 后面可以跟任何标识符来做对象,System.in为固定格式
int a = in.nextInt();
String b = in.next();
System.out.println(a);
System.out.println(b);
}
}
控制语句
条件语句 - 根据不同条件,执行不同语句
- if
- if…else
- if…else if
- if…else if … else if…else
- switch
if条件结构
if条件结构是根据条件判断之后再做处理