Java数据类型和运算符

来源:互联网 发布:word mac版 编辑:程序博客网 时间:2024/06/05 09:02

1 数据类型

1.1 基本数据类型

在Java中定义好了8种基本数据类型(原生数据类型),包括整数类型、小数类型(浮点数)、字符类型和布尔类型四种。
1.整数类型4种

byte

8位

short      

16位

int

32位

long

64位

其中byte的取值范围为(-128,127)。

在直接使用一个整数类型的数字时(比如:System.out.println(123); ),它的默认类型为int。在声明long时,需要加上l/L作为后缀,否则可能出现超出范围的情况。比如:

// 声明long时,加上l/L后缀long lon = 2147483648L
2.小数类型(浮点数)2种

float

32位

double  

64位

float为单精度,double为双精度,在直接使用一个小数类型的数字时(比如:System.out.println(3.14); ,默认为double类型。在声明float类型时,需要加上f/F作为后缀,否则可能会损失精度。比如:
// 声明float时,加上f/F后缀float f = 1.2F
小数中的科学计数法

double d1 = 3.14e3;         // 3.14*10^3double d2 = 3.14e-3;        // 3.14/10^3

3.字符类型1种

char      

16位

声明字符类型时直接使用单引号,比如:'a','1','好'。
还可以把char当做一个整数类型来使用,字符在存储时,会转换成对应的Unicode字符编码,然后转换成二进制存储。比如:

char a='a'; char b=97;   int c='a';System.out.println(a); // 输出为aSystem.out.println(b); // 输出字符编码对应的字符aSystem.out.println(c); // 输出字符对应的字符编码97
4.布尔类型1种

boolean

1位

boolean类型的值为ture或false。

1.2 引用数据类型

Java中的引用数据类型包括数组、类、接口、枚举等。

比如String类是Java中定义好的一个类,也是一种类型,表示字符串。用+可以实现字符串的拼接,只要+两边有一个字符串类型,就表示拼接。比如:

int a = 10;System.out.println("a:"+a); // 输出为a:10

1.3 自动类型转换

byte-8位   short/char-16位   int-32位   long-64位   float-32位    double-64位

低------------------------------------------------------------------------------------------->高

从byte到double,数据类型的精度逐渐提高,可以将低精度的数据放入高精度中,但无法将高精度的数据放入低精度中。

类型转换示例:

// i是低精度的int可以赋值给高精度类型的d,int i;double d=i;// 但d不能赋值给低精度类型的jint j=d; // 编译过程中编译器能识别123在byte范围内,自动类型隐式转换byte b=123;// 将123放入int类型的变量k中,再将k放入byte类型中会编译报错,可能损失精度,因为编译器不知道变量中的值,无法隐式转换int k=123;byte c=k;

1.4 强制类型转换

在类型转换的过程中,可以使用强制类型转换而达到目的。比如:
double d = 3.1415;int m = (int)d;System.out.println(m); // 结果为3
在强制类型转换的过程中,double类型的小数直接舍去。
char和int之间的转换
System.out.println('A');        // ASystem.out.println((int)'A');   // 65System.out.println(65);         // 65System.out.println((char)65);   // A

2 运算符

2.1 表达式

表达式:就是由一系列的常量,变量,运算符,()等组成的一个算式,其整体就是一个值,例如:int i=3;一个表达式的结果值,类型是表达式中精度最高的类型。

表达式:

byte b1 = 1;byte b2 = 2;// bb类型为int,因为byte、short、char参与运算时自动提升为intbb = b1 + b2; 
// 字符'A'参与运算时提升为65,结果为75System.out.println(10+'A');

2.2 算数运算符

+   加号、字符串连接("a"+1)、正号

-   减号、负号

*   乘法

/   除法

%   取模(用在整数上)

++ 自加

-- 自减

除法运算中的细节

10/3=3  10.0/3=3.333...

整数/0会报错,小数/0 不会报错

0.0/0.0 结果为 NaN (Not a Number)

1.0/0.0 结果为Infinity

自加自减中的细节

int j = i++:++在变量i后,表达式的值为变量自增之前的值

int j = ++i:++在变量i前,表达式的值为变量自增之后的值

2.3 赋值运算符

=  +=  -=  *=  /=  %=

赋值运算符是在变量自身基础上做运算。

int i=2;System.out.println(i+=2);// 2+2=4System.out.println(i-=1);// 4-1=3System.out.println(i*=4);// 3*4=12System.out.println(i/=2);// 12/2=6System.out.println(i%=5);// 6%5=1


short s = 3;s += 2;System.out.println(s);// 结果为5short s = 3;s = s + 2;System.out.println(s);// 编译报错 Type mismatch: cannot convert from int to short
s+2在运算过程中结果提升为int,int类型放入short类型的变量s中,会出现损失精度的问题。

2.4 比较运算符

==  !=  >  <  >=  <=  instanceof

instanceof 用来在运行时指出对象是否是某个特定类或它子类的一个实例,返回一个布尔值。

2.5 逻辑运算符

&(与):两边为true 结果为true

|(或): 一边为 true 结果为 true

&&(双与):两边为 true 结果为 true

||(双或):一边为 true 结果为 true

^(异或):两边不一样为true ,否则为false

!(非):对结果值取反

短路

在&&(双与)、||(双或)运算符中,如果逻辑运算左边的值能够确定整个逻辑运算表达式的值,那么右边就短路不执行。

2.6 位运算

&  按位与

|  按位或

^  按位异或

~  按位取反,0--->1,1--->0

<< 把二进制位向左移

>> 把二进制位向右移

>>> 无符号右移位

2.7 三目运算

X ? Y : Z

将三目运算整体看成是一个表达式,X是一个布尔值或者结果为布尔的表达式,Y、Z可以是任意类型的值或者表达式,但Y、Z类型要一致。

如果X==true,那么整个三目运算的结果值就是Y的值,否则是Z的值。

// 找出两个整形变量中的最大值int a = 6;int b = 9;int max = a > b ? a : b // a>b结果为false,结果值为bSystem.out.println(max);
可以用三目运算来取代一般的if-else结构。

2.8 算数运算的应用

1.不使用第三个变量,将两个变量的值对换

int a = 3;int b = 4;a=b+a;// 把a、b的和赋值给ab=a-b;// 根据和的关系,将a值赋给ba=a-b;// 根据和的关系,将b值赋给aSystem.out.println(a);// a = 4System.out.println(b);// b = 3