一、数据类型(基本数据类型和引用数据类型)
1.基本数据类型:
数据类型 | 字节数 | 位数 | 范围 |
boolean(布尔类型) | 1 | 1 | true或者false |
byte(字节型、整数型) | 1 | 8 | ![]() |
short(短整型) | 2 | 16 | ![]() |
char(字符型) | 2 | 16 | 0...65535 |
int(整型) | 4 | 32 | ![]() |
long(长整型) | 8 | 64 | ![]() |
float(单浮点型) | 4 | 32 | 3.4e-038...3.4e+038 |
double(双浮点型) | 8 | 64 | 1.7e-308...1.7e+308 |
2.引用数据类型:数组、类、接口、枚举类型(enum)、注解类型(@interface)
3.定义变量及赋值
(1)定义:
int age;
char ch1;
String s;
(2)赋值:
age=12;
ch1='a';
s="hello";
4.整数类型
(1)不能超过范围
(2)进制:
0b或者0B开头:二进制
0开头:八进制
0x或者0X开头:十六进制
5.浮点型
(1)浮点型默认为double类型,若要用float型,在后面加上F或f。
float pi=3.14F;
6.字符型
(1)char c='a';
char c1=97;
上面定义都正确
(2)char ch1=65;
ch1++;
System.out.println(ch1);//输出结果为 B
7.布尔型
(1)true和flase不代表非0数和0
8.字符串型
(1)字符串不是基本数据类型,而是引用数据类型
(2)一个字符串字面量不能分两行来写。若字符串太长,可以使用+连接。
二、运算符
1.算数运算符
(1)一元运算:正(+)、负(-)、自增(++)、自减(--)
(2)二元运算:加(+)、减(-)、乘(*)、除(/)、取余数(%)
(3)+ 还可用于字符串对象的连接
System.out.println("abc"+"def");//输出为 abcdef
int x=1,y=2;
System.out.println("abc"+x+y);//输出为 abc12
System.out.println(x+y+"abc");//输出为 3abc
(4)char y='b';//b的位置是98
若执行System.out.println(++y);//输出 c
若执行System,out.println(y+1);//输出99
2.关系运算符
(1)>,>=,<,<=,==,!=
3.位运算符
(1)位逻辑运算:
~ 按位取反;&按位与;|按位或;^按位异或;
(2)移位运算:
<< 左移; >> 右移;>>> 无符号右移;
规则:左移右添0
右移为正左添0
右移为负左添1
无符号右移左添0
(3)位运算符只能用于整型数据
(4)char类型进行位运算,自动转成int型
(5)位运算过程是二进制数运算
(6)位运算符也常用于改变数据,例如求2的4倍是多少等。
4.逻辑运算符
!逻辑非;&& 短路与;|| 短路或;& 逻辑与;| 逻辑或;^ 逻辑异或;
(1)运算对象和结果都是布尔型数据
(2)短路与非短路的区别:
短路与:若左边为false,结果为false,不再算右边
短路或:若左边为true,结果为true,不再算右边
其他情况及非短路都要将所有运算执行完
5.赋值运算符
(1)作用:为变量指定新的值
(2)赋值运算符(=):
格式:variableName=expression;
注意:左边变量必须能接受右边表达式的值。int j=3.14; 即是错误用法。
(3)引用赋值:
Date d1=new Date();
Date d2=d1;
这里d1的地址赋给d2,d1和d2指向同一对象。
别名现象(aliasing):
class Number {
int i;
}
public class Assignment {
public static void main(String[] args) {
Number n1 = new Number();
Number n2 = new Number();
n1.i = 9;
n2.i = 47;
System.out.println("1: n1.i: " + n1.i +
", n2.i: " + n2.i);
n1 = n2;
System.out.println("2: n1.i: " + n1.i +
", n2.i: " + n2.i);
n1.i = 27;
System.out.println("3: n1.i: " + n1.i +
", n2.i: " + n2.i);
}
}
输出为:
1: n1.i: 9, n2.i: 47
2: n1.i: 47, n2.i: 47
3: n1.i: 27, n2.i: 27
class Letter {
char c;
}
public class PassObject {
static void f(Letter y) {
y.c = 'z';
}
public static void main(String[] args) {
Letter x = new Letter();
x.c = 'a';
System.out.println("1: x.c: " + x.c);
f(x);
System.out.println("2: x.c: " + x.c);
}
}
输出为:
1: x.c: a
2: x.c: z
(4)扩展赋值运算符:
格式:variableName op = expression;
例如:a<<=b;等价于a=a<<b;
6.运算符的优先级
优先级 | 运算符 |
1 | ++,--,+(正),-(负),~,!,(cast)类型转换 |
2 | *,/,% |
3 | +(加),-(减) |
4 | <<,>>,>>> |
5 | <,<=,>,>=,instanceof(实例运算符) |
6 | ==,!= |
7 | & |
8 | ^ |
9 | | |
10 | && |
11 | || |
12 | ?: |
13 | =,+=,-=,*=,/=,%= |
注意:小括号优先级最高(遇事不决小括号)。
三、数据类型转换
1.自动类型转换(加宽转换):
(1)定义:将具有较少位数的数据类型转换为具有较多位数的数据类型。
(2)包括:
byte->short,int,long,float,double
short->int,long,float,double
char->int,long,float,double
int->long,float,double
long->float,double
float->double
注意:int,long转float或者long转double可能发生信息丢失
(3)运算时,若两个操作数类型不同,会自动转换成更宽的类型
2.强制类型转换
(1)格式:a=(类型)b;
例如:
double d=15;
byte b=3;
b=(byte)d;
(2)强制类型转换可能会丢失信息
(3)包括:
short->byte,char
char->byte,short
int->byte,short,char
long->byte,short,char,int
float->byte,short,char,int,long
double->byte,short,char,int,long,float
(4)表达式中的自动提升
例如:
byte a=40;
byte b=50;
byte c;
c=a+b;//错误
c=(byte)a+b;//正确
因为在计算a+b时,会自动将a,b转成int类型,这时再赋给c,需要强制转换。
但是c=40+50;正确,因为常量表达式不会提升类型。
参考资料:
《Java语言程序设计》——清华大学出版社
《Java编程思想》——机械工业出版社