Java数据类型和运算符
一、java 数据类型
Java的数据类型分为两种。
一种是原始数据类型(8种),另外一种是引用数据类型(也就是 类类型)。
1)原始数据类型分为8种,每种基本类型又对应有各自的包装类(wrapper class)。即:
注意:
每种对应的包装类都有相应的静态常量
包装类都设有将String转换为基本类型的方法
2)引用数据类型分3种:数组,类,接口
二、标识符
1、必须以 字母、下划线“_”或“$”符号开头。
2、首字母后,可以跟任意数量的字母、数字、下划线“_”或“$”符号。 注意:
1、标识符,可以包含数字,但是不能以数字开头。
2、除了下划线“_”和“$”符号以外,标识符不能包含任何特殊字符。
3、标识符不能使用Java语言的关键字。
4、Java 变量名区分大小写,所以cat 和Cat 是不相同的。
5、Java变量名的长度没有任何限制。
三、变量的作用域和生命周期
Java(和C以及C++一样)是块结构语言。代码“块”指的是包含在一对大括号{}中的0行或多行代码序列。
代码块可以嵌套在另一个代码块中直至任意深度,变量可以在程序内的任何块中声明。变量作用域是能够用变量名引用该变量的那一部分代码——具体地说就是从变量第一次被声明的位置开始到声明这个变量的代码块的封闭(右)括号为止。只要变量名能够被编译器识别,就可以说变量在作用域内。一旦程序执行退出代码块,在这个代码块中声明的任何变量就超出了作用域,对程序而言这些变量不可访问。
四、类型转换
Java数据类型和运算符
基本类型有以下四种:
int长度数据类型有:byte(8bits)、short(16bits)、int(32bits)、long(64bits)、 float长度数据类型有:单精度(32bits float)、双精度(64bits double) boolean类型变量的取值有:ture、false
char数据类型有:unicode字符,16位
对应的类类型:Integer、Float、Boolean、Character、Double、Short、Byte、Long
转换原则
从低精度向高精度转换
a. byte 、short、int、long、float、double、char
注:两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换
b. 强制类型转换
1)截断
float a=34.56734;
int b=(int) a;
2)缩小转化
int a=32;
byte b=(byte)a;
基本类型向类类型转换
正向转换:通过类包装器来new出一个新的类类型的变量
Integer a= new Integer(2);
反向转换:通过类包装器来转换
int b=a.intValue();
类类型向字符串转换
正向转换:因为每个类都是object类的子类,而所有的object类都有一个toString()函数,所以通过toString()函数来转换即可
反向转换:通过类包装器new出一个新的类类型的变量
eg1: int i=Integer.valueOf(“123”).intValue()
说明:上例是将一个字符串转化成一个Integer对象,然后再调用这个对象的intValue()方法返回其对应的int数值。
eg2: float f=Float.valueOf(“123”).floatValue()
说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
Java数据类型和运算符
eg4:double d=Double.valueOf(“123”).doubleValue()
说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。
eg5: long l=Long.valueOf(“123”).longValue()
说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
eg6: char=Character.valueOf(“123”).charValue()
说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。
基本类型向字符串的转换
正向转换:
如:int a=12;
String b;b=a+””;
反向转换:
通过类包装器
eg1:int i=Integer.parseInt(“123”)
说明:此方法只能适用于字符串转化成整型变量
eg2: float f=Float.valueOf(“123”).floatValue()
说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
eg4:double d=Double.valueOf(“123”).doubleValue()
说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。
eg5: long l=Long.valueOf(“123”).longValue()
说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
eg6: char=Character.valueOf(“123”).charValue()
说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。
五、java运算符
一、算术运算符
所谓算术运算符,也就是我们数学中学到的加、减、乘、除等运算。这些操作可以对几个不同类型的数字进行混合运算,为了保证操作的精度,系统在运算的过程中会做相应的转换。
所谓数字精度,也就是系统在做数字之间的算术运算时,为了尽最大可能
Java数据类型和运算符
地保持计算机的准确性,而自动进行相应的转换,将不同的数据类型转变为精度最高的数据类型。规则如下:
1)当使用运算符把两个操作数结合到一起时,在进行运算前两个操作数会转化成相同的类型。
2)两个操作数中有一个是double类型的,则另一个将转换成double型。
3)两个操作数中有一个是float类型的,则另一个将也转换成float型。
4)两个操作数中有一个是long类型的,则另一个将也转换成long型。
5)任何其它类型的操作,两个操作数都要转换成int类型。
对于int型的相关操作,加、减、乘的结果都是非常容易理解的,重点讲一下除(/)的运算。
两个整数相除的结果是整数,这一点与数学中是不同的,在Java中,两个整数相除的结果类似于数学中的求模运算。整除的余数是用%表示,例如15 / 2 = 7,而不是7.5,15 % 2 = 1。我们用程序验证一下:
int a = 15;
int b = 2;
double c = 2;
a/b; a%b; a/c ;a%c;
输出结果:
15 / 2 = 7
15 % 2 = 1
15 / 2.0 = 7.5
15 % 2.0 = 1.0
在循环与控制中,我们经常会用到类似于计数器的运算,它们的特征是每次的操作都是加1或减1。在Java中提供了自增、自减运算符,X++使变量X的当前值每次增加1,而X--是自减运算符,每次操作使当前X的值减1。例如:
/*测试自增、自减操作*/
int x = 10;
int a = x+ x++;
int b = x + ++x;
int c = x + x--;
int d = x + --x;
输出结果:
a = 20
x = 11
Java数据类型和运算符
b = 23
x = 12
c = 24
x = 11
d = 21
x = 10
int x = 10;
int a = ( x++)+x;
注意:输出结果:
a=21; x=11;
二、关系运算符
Java具有完美的关系运算符。这些关系运算符基本上同数学中的关系运算符是一致的。“>”大于、“<”小于、“>=”大于等于、“<=”小于等于、“==”等于、“!=”不等于。例如:
/*关系运算符测试*/
boolean x, y, z;
int a = 15;
int b = 2;
double c =15;
x = a > b; //true;
y = a < b; //false;
z = a != b; //true;
1)switch语句
switch(condition)
{
case ABC:
statements;
case DEF:
statements;
break;
}
2)switch-case语句
switch(expression)
Java数据类型和运算符
{
case value1:
action1 statements;
break;
case value2:
action2 statements;
break;
。。。
case valueN:
actionN statements;
break;
default:
default statements;
}
注意:
1) expression是一个变量,包含将要计算的值。它必须属于byte,short,int或char型。
2)value1,。。。valueN,是可能与expression变量中的值相匹配的常量值。
3)action1,。。。 actionN,是在相应的case语句的值为真时要执行的语句。
4)default是一个可选的关键字。在所有的case语句的值为假时指定要执行的语句。
5)break是一个关键字,用于表达式的值为真时,结束switch-case语句。
三、逻辑运算符
在Java语言中有四种逻辑运算符,它们是NOT(非,以符号“!”表示)、AND(与,以符号“&&”表示、)OR(或,以符号“||”表示),XOR(异或,^)
& - 逻辑与
| - 逻辑或
^ - 逻辑异或
! - 逻辑反
A B A&B A|B A^B !A
true false false true true true
false true false true true true
false false false false false true
true true true true false false
/*逻辑运算符测试*/
boolean x, y, z, a, b;
a = 'a' > 'b';
b = 'R' != 'r';
Java数据类型和运算符
x = !a;
y = a & b;
z = a|b;
输出结果:
x = true
y = false
z = true
四、移位运算符
移位运算符的面向对象也是二进制的“位”。可以单独用移位运算符来处理int型数据。它主要包括:左移位运算符(<<)、“有符号”右移位运算符(>>)、“无符号”右移运算符(>>>)
1)左移位运算符
左移位运算符,用符号“<<”表示。它是将运算符左边的对象向左移运动运算符右边指定的位数(在低位补0)。
2)“有符号”右移运算符
“有符号”右移运算符,用符号“>>”表示。它是将运算符左边的运算对象向右移动运算符右侧指定的位数。它使用了“符号扩展”机制,也就是说,如果值为正,在高位补0,若为负,则在高位补1。
3)“无符号”右移运算符
“无符号”右移运算符,用符号“>>>”表示。它同“有符号”右移运算符的移动规则是一样的,惟一的区别就是:“无符号”右移运算符,它采用了“零扩展”,也就是说,无论值为正负,都在高位补0。
/*移位运算符测试*/
int a = 15;
int b = 2;
int x = a << b;
int y = a >> b;
int z = a >>> b;
输出结果:
15 << 2 =60
15 >> 2 = 3
15 >>> 2 =3
五、赋值运算符
赋值运算符是程序中最常用的运算符了,只要有变量的声明,就要有赋值运算。如a = 3;这里的a我们都知道是变量名,根据前面对变量的定义,我们可以知道这里的a实际上就是内存空间的一个名字,它对应的是一段内存空间,一在要在这个空间放入3这个值。这个放入的过程就实现了赋值的过程。 赋值运算一览表
Java数据类型和运算符
六、条件运算符
expression1?expression2 :expression3
expression1 是一个boolean条件,其值:true或false true:执行 expression2
false:执行 expression3
最后总结一下运算符的优先级
Java数据类型和运算符
<<、>>、>>> >、<、>=、<= ==
、!= & ^ | && || ? :
6 7 8 9 10 11 12 13 14