Java-运算符和数据类型
1、 基本数据类型
Java数据类型可分为基本数据类型和引用数据类型
其中基本数据类型包括6种数值型与2个非数值型,分别为byte、short、int、long、float、double,和char、boolean。其中引用数据类型包括class、interface、array和枚举
类型 |
关键字 |
范围 |
字节 |
位数 |
初始值 |
有无符号 |
封装类 |
字节型 |
byte |
-128 ~ 127 |
1 |
8 |
0 |
Signed |
Byte |
短整型 |
short |
-215 ~ 215-1 |
2 |
16 |
0 |
Signed |
Short |
整型 |
int |
-231 ~ 231-1 |
4 |
32 |
0 |
Signed |
Integer |
长整型 |
long |
-263 ~ 263-1 |
8 |
64 |
0 |
Signed |
Long |
单精度浮点 |
float |
-3.403E38 ~ 3.403E38 |
4 |
32 |
0 |
Signed |
Float |
双精度浮点 |
double |
-1.798E308~1.798E308 |
8 |
64 |
0 |
Signed |
Double |
字符型 |
char |
‘\u0000’ ~ ’\uffff’ 或0 ~ 65536 |
2 |
16 |
\u0000 |
unSigned |
Character |
布尔型 |
boolean |
True/false |
|
|
false |
NA |
Boolean |
Java语言的整型常量默认为int型,声明long型后面需要加上L或l(小写l易与1混淆,建议写大写L); Java浮点型常量默认为double,如要声明一个常量为float,则需要在数字后面加f/F(在低版本中,习惯在double类型后加d)如:
int a = 15 ; |
double d = 12345.6 ; |
long b = 155555L ; |
float f = 12.3f ; |
long c = 45 ; |
float e = 1.2 ; |
以上例子会强制把c从整型转换为长整型,由少变多不会出问题;
强制把e从double类型转为float,但由于是从多到少,所以可能损失精度。
英文双引号中的内容表示字符串,如:”5321”、”我是字符串”。字符串类型使用String表示(首字母大写),java.lang.String是java中的类(class),通过String声明字符串变量。
String s = “我是字符串” ;
注意:’123’不是合法的字符类型,详见上面字符型的取值范围
2、 数据类型的转换
定义变量的时候,需要给变量赋予一个初值
public class demo2{ public static void main(String[] args) { int a = 10 ; long b = 20L ; long c = 20 ; //不报错,自动进行类型转换 double d = 1.234 ; //float e = 1.234 ; 报错,float转换为int可能损失精度 float f = 1.234f ; char g = 'g' ; boolean h = true ; //boolean i; 报错,值未初始化 System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); System.out.println(f); System.out.println(g); System.out.println(h); } } |
自动类型转换:小范围类型可以转换为大范围类型的值,大框子可以装下小框子
强制类型转换:大范围类型无法转换为小范围的值,因为小框子装不下大框子,除非强塞
强制类型转换:小范围类型名 变量名 = (小范围类型名)大范围类型的值;
public class demo5{ public static void main(String[] args) { byte a = -128 ; byte b = 127 ; //byte c = a-1 ; 报错,可能损失精度 byte d = (byte)(a-1); //强制类型转换 System.out.println(a-1); //不会溢出,此时将byte自动转为int System.out.println(b+1); //不会溢出,此时将byte自动转为int //System.out.println(c); 错误: 不兼容的类型: 从int转换到byte可能会有损失 System.out.println(d); //进行强制转换后,输出为127,发生了溢出现象,最小值-1=最大值,最大值+1=最小值 } } |
说明:byte、short、char 之间不会相互转换,如果想要进行操作,则需要把他们先转换为 int类型,然后再执行操作。
public class demo9{ public static void main(String[] args) { byte a = 1 ; short b = 10 ; int c = 100 ; /* char i = a ; 错误: 不兼容的类型: 从byte转换到char可能会有损失 char j = b ; 错误: 不兼容的类型: 从short转换到char可能会有损失 char k = c ; 错误: 不兼容的类型: 从int转换到char可能会有损失 */ char i =(char) a ; char j =(char) b ; char k =(char) c ; System.out.println(i); //输出乱码 System.out.println(j); //输出乱码 System.out.println(k); //输出d } } |
3、 扩展数据类型
在计算机中,整数可以有 4 种表示方式,分别是十进制、十六进制数、八进制数、二进制数。
public class demo11{ public static void main(String[] args) { int a = 20 ; //十进制 int b = 0x89 ; //十六进制:表示形式0X或0x开头,0-9 A-F int c = 012 ; //八进制:表示形式0开头,0-7 int d = 0b1010 ; //二进制:表示形式0b或0B开头,0或1 System.out.println("十进制:"+a); //输出 十进制:20 System.out.println("十六进制:"+b); //输出 十六进制:137 System.out.println("八进制:"+c); //输出 八进制:10 System.out.println("二进制:"+d); //输出 二进制:10 } } //输出的结果都显示为十进制的数 |
关于整数除法的问题
public class demo15{ public static void main(String[] args) { int a = 20 ; int b = 8 ; System.out.println(a/b); //输出2 a和b都是int类型,所以a/b也是int类型 System.out.println((float)a/b); //输出2.5 a是float,b是int类型,所以a/b自动转换为float类型 System.out.println(a/(float)b); //输出2.5 b是float,a是int类型,所以a/b自动转换为float类型 } } |
转义字符
\r |
归位 |
\b |
倒退一格 |
\f |
换页 |
\’ |
‘ |
\n |
换行 |
\t |
一个制表符 |
\\ |
\ |
\” |
“ |
转义字符的类型是字符类型
public class demo18{ public static void main(String[] args) { char a = '\n' ; //换行 char b = '\t' ; //tab制表符 char c = '\r' ; //归位,表示接受键盘输入,相当于摁下了回车键 char d = '\b' ; //退一格 System.out.println("HELLO"+a+"world"); //HELLO换行world System.out.println("HELLO"+b+"world"); //HELLO world System.out.println("HELLO WORLD"+c+"ABC"); //ABCLO WORLD (把HEL换为ABC) System.out.println("HELLO WORLD"+d+"ABC"); //HELLO WORLABC (把D删除) System.out.println("武汉加油,中国加油"); //武汉加油,中国加油 System.out.println("武汉加油,\"中国\"加油"); //武汉加油,"中国"加油 } } |
4、 运算符
1)、赋值运算符(=)
2)、一元运算符
+ |
正 |
|
- |
负 |
Int a=1; 打印-a,输出-1 |
! |
否定取反 |
Boolean b=true; 打印!b,输出false |
3)、算术运算符
+ |
加法 |
int a = -10 ; int b = 3 ; int c = 10 ; int d = -3 ; System.out.println("结果为"+(a/b)); //-3 System.out.println("结果为"+(a*b)); //-30 System.out.println("结果为"+(a%b)); //-1 System.out.println("结果为"+(c%d)); //1 System.out.println("结果为"+(a%d)); //-1 |
- |
减法 |
|
* |
乘法 |
|
/ |
除法 |
|
% |
取余 |
4)、关系运算符
>/< |
|
返回结果为boolean类型 |
>=/<= |
|
|
== |
判断是否等于 |
|
!= |
不等于 |
5)、自增自减运算符
x++ |
先运算后自加 |
int a = 10 ; int b = 20 ; int x = (a++) + (--b) ; System.out.println("x为"+x); //29 System.out.println("a为"+a); //11 System.out.println("b为"+b); //19 |
x-- |
先运算后自减 |
|
++x |
先自加后运算 |
|
--x |
先自减后运算 |
6)、逻辑运算符
与:要求所有条件都进行判断; 短路与:如果第一个条件为false,则后面的条件不再判断
或:要求所有条件都进行判断; 短路或:如果第一个条件为true,则后面的条件不再判断
& |
与 |
int a = 10 ; int b = 20 ; boolean x = (a > b) ; boolean y = (a < b) ; System.out.println(x & y); //false System.out.println(x | y); //true System.out.println(x && y); //false System.out.println(x || y); //true |
&& |
短路与 |
|
| |
或 |
|
|| |
短路或 |
7)、括号运算符
()代表优先级最优先的运算
8)、三目运算符
表达式? 成立时的结果: 不成立时的结果
int a = 10 ; int b = 20 ; int x = a>b?a:b; System.out.println(x); //20 |
9)、位运算符
& |
按位与:都为1,则取1,否则为0 |
| |
按位或:都为0,则取0,否则为1 |
^ |
异或:相同为0,否则为1 |
~ |
取反 |
x<<2 |
左位移:将x的二进制数整体左移指定的位数2,空位用0填充 |
x>>2 |
右位移:将x的二进制数整体左移指定的位数2,正数用0填充,负数用1填充 |
>>> |
无符号右位移:一律用 0 填充 |
位运算符都是需要转换为二进制后才能进行运算
public class demo25{ public static void main(String[] args) { int a = 3 ; //00000000 00000000 00000011 int b = 6 ; //00000000 00000000 00000110 System.out.println(a & b); //2
// 00000000 00000000 00000011 // 00000000 00000000 00000110 // ----------------------------------- // 00000000 00000000 00000010
System.out.println(a | b); //7
// 00000000 00000000 00000011 // 00000000 00000000 00000110 // ---------------------------------- // 00000000 00000000 00000111
System.out.println(a ^ b); //5
// 00000000 00000000 00000011 // 00000000 00000000 00000110 // ---------------------------------- // 00000000 00000000 00000101 } } |
位移
public class demo26{ public static void main(String[] args) { int a = 3 ; //00000000 00000000 00000011 System.out.println(a<<2); //12 /* 00000000 00000000 00000011 00000000 00000000 0000001100 */ System.out.println(a>>2); //0 /* 00000000 00000000 00000011 0000000000 00000000 00000011 */ System.out.println(a>>>2); //0 /* 00000000 00000000 00000011 0000000000 00000000 00000011 */ } } |
~取反和负数的二进制表示
public class demo27{ public static void main(String[] args) { int a = 3 ; //00000000 00000000 00000011 int b = -3 ; //10000000 00000000 00000011 3的二进制把符号位变为1 //10000000 00000000 00000011 原码 //11111111 11111111 11111100 反码 //11111111 11111111 11111101 补码 -3的二进制表示 //00000000 00000000 00000010 ~b二进制表示 System.out.println(~a); //-4 System.out.println(~b); //2 } } |
10)、运算符的优先级
表达式通常由多个运算符组成。优先级的规则决定每个运算符在任何给定表达式中的计算顺序
按操作数多少划分:一元操作符 → 二元操作符 → 三元操作符
按运算类型划分:算术运算符→关系运算符→逻辑运算符→赋值运算符
尽量多的使用括号:括号优先级别最高
5、 简洁表达式
运算符 |
范例 |
相当于 |
备注 |
+= |
a+=b |
a=a+b |
short a = 3 ; a+=1; //a = a + 1; 错误: 不兼容的类型: 从int转换到short可能会有损失 System.out.println(a); //输出4 //说明:此处的a+=1,等价于a = (short)(a+1) |
-= |
a-=b |
a=a-b |
|
*= |
a*=b |
a=a*b |
|
/= |
a/=b |
a=a/b |
|
%= |
a%=b |
a=a%b |
6、 JShell交互式编程工具
在 JDK1.9 以后,提供了一个交互式的开发工具——JShell。利用此工具可以方便的执行程序。JSheel一般用于测试,开发阶段不使用此工具
进入JSheel的两种方法:直接在dos窗口中输入jsheel 或 在运行中输入JSheel
可以在DOS窗口中,可以直接执行文件的代码,使用指令:/open i:/01.txt
作者:kerwin-chyl
文章链接:https:////www.cnblogs.com/kerwin-chyl
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利