Java数据类型以及运算符
2021/7/28 14:07:33
本文主要是介绍Java数据类型以及运算符,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
语法基础
- 数据类型
- 一图流概括Java的数据类型
- 数据使用时的注意事项
- 字符串类型变量
- 转义字符的考察
- 变量的命名规则
- 字面值常量
- 数据类型之间的转换
- 使用强制类型转换
- 数值提升
- int和string的相互转换
- 运算符
- 算术运算符+ - * / %
- 关系运算符== != < > <= >=
- 逻辑运算符&& || !
- 位运算符& | ~ ^
- 移位运算符<< >> >>>
- 条件运算符 表达式1 ? 表达式2 : 表达式3
- 给定一个十进制整数, 如何转成二进制形式? 如何转成十六进制形式?
数据类型
一图流概括Java的数据类型
数据类型 | 包装类 | 大小 | 位数 | 范围 | 默认值 |
---|---|---|---|---|---|
int | Integer | 4byte | 32位 | -231~231-1 | 0 |
short | Short | 2byte | 16位 | -215(-32768)~215-1 | 0 |
long | Long | 8byte | 64位 | -263~263-1 | 0 |
float | Float | 4byte | 32位 | 3.4e-45~1.4e38 | 0.0 |
double | Double | 8byte | 64位 | 4.9e-324~1.8e308 | 0.0 |
char | Character | 2byte | 16位 | 存储Unicode码,用单引号赋值 | 无 |
byte | Byte | 1byte | 8位 | -128~127 | 0 |
boolean | Boolean | 无 | 无 | true、false | false |
数据使用时的注意事项
1、局部变量在使用的时候字面值是一定不能超过范围的
2、long,float,double在使用时要分别在后面加上l,f,d,比如:
long num = 10l;//也可写作10L double num = 1.0d;//也可以不写 float num = 1.0f;//也可写作10F
3、计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符(Unicode)占用两个字节, 表示的字符种类更多, 包括中文
字符串类型变量
把一些字符放在一起就构成了字符串变量
先来看两个字符串的代码:
public static void main(String[] args) { String str = "wangzhenyu love lishilin!";//引用变量string System.out.println(str);//但是存的也是地址 int a=10; System.out.println("a = " + a); int b=10; System.out.println("hello " + a + b);//只拼接不算 System.out.println(a+b+"haha");//先运算再拼接 String str2 = "hello \"张三\""; System.out.println(str2); }
这个代码包含的意义就很多了,首先第一个wangzhenyu love lihsilin!这样一个字符串只是将字符串的地址放到str中,打印时也只是访问了str的地址。
第二个字符串拼接的时候,中间要加+,第一个是a=10,字符串+整数时,整数之间放上去不进行计算,所以时hello1010,整数+字符串时要先计算整数在添上字符串,20hello
第三个也是字符串中转义的考察,可以看到\将"转义了,那么就输出",所以结果就是hello"张三"
public static void main(String[] args) { String str1 = "hello "; String str2 = "abc"; String str3 = str1+str2; System.out.println(str3); }
这个比较简单,字符串加字符串直接加号就行
转义字符的考察
我想通过三个列子应该就能对转义字符\有更深的了解吧
System.out.println("\\\"hello\\\""); System.out.println("\\"hello\\""); System.out.println("/\"hello/\"");
首先是第一个:\先转义第二个\,打印出\,第三个\转义出",打印出”,后面也是一个\转义,转义出另一个特殊字符打印出来,最后的结果是
“hello”
读者可以自行做下后两个,答案分别是
错误编译(有前"没有后")
/“hello/”
变量的命名规则
1、见名知意
2、驼峰命名
a.变量的定义要采用小驼峰的形式bigNum
b.类名,接口要用大驼峰的形式BigNum
字面值常量
10 | int 字面值常量(十进制) |
---|---|
010 | int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8 |
0x10 | int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16 |
10L | long 字面值常量. 也可以写作 10l (小写的L) |
1.0 | double 字面值常量. 也可以写作 1.0d 或者 1.0D |
1.5e2 | double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2 |
1.0f | float 字面值常量, 也可以写作 1.0F |
true | boolen 字面值常量, 同样的还有 false |
‘a’ | char 字面值常量, 单引号中只能有一个字符 |
“abc” | String 字面值常量, 双引号中可以有多个字符. |
数据类型之间的转换
int a = 10; long b = 20; a = b; // 编译出错, 提示可能会损失精度. b = a; // 编译通过. int a = 10; double b = 1.0; a = b; // 编译出错, 提示可能会损失精度. b = a; // 编译通过.
long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.
double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.
即范围较小的能隐式转换成范围较大的类型,反之不行
int和boolean类型不能相互转换,因为boolean类型就只有true和false两种
使用强制类型转换
int a = 0; double b = 10.5; a = (int)b; int a = 10; boolean b = false; b = (boolean)a; // 编译出错, 提示不兼容的类型
使用强制类型可以将double强制转为int刑,但精度会丢失,10.5会变为10
数值提升
int a = 10; long b = 20; int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度 long d = a + b; // 编译通过
当int和long混合运算时,int会提升为long类型,计算结果就是long类型,所以直接放到int型是不合适的,精度缺失,只能用long类型来接收
byte和byte的计算
byte a = 10; byte b = 20; byte c = a + b; System.out.println(c);
虽然a和b都是byte类型,但是计算机在计算的时候会首先将它们转成int型,最后得到的结果也是int类型的,放到byte类型中是不行的
所以改法就是类型转换成byte类型
byte c = (byte)(a + b);
1、不同类型的数据混合运算, 范围小的会提升成范围大的
2、对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算
int和string的相互转换
public static void main(String[] args) { //int转成string int num = 10; // 方法1 String str1 = num + ""; // 方法2 String str2 = String.valueOf(num); System.out.println(str1); System.out.println(str2); System.out.println("-------------------"); //string转成int String str = "100"; int NUM = Integer.parseInt(str); System.out.println(NUM); }
直接就能转换,yysy这是真的比C好用
运算符
算术运算符+ - * / %
值得注意的是double型现在也能取余操作了
System.out.println(11.5 % 2.0);
运算结果是1.5
关系运算符== != < > <= >=
返回值都是boolean类型,即只有true or false
逻辑运算符&& || !
对于 && , 如果左侧表达式值为 false, 则表达式的整体的值一定是 false, 无需计算右侧表达式
对于 ||, 如果左侧表达式值为 true, 则表达式的整体的值一定是 true, 无需计算右侧表达式(都遵守短路运算法则)
位运算符& | ~ ^
按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
值得注意的是: 当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算
按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
public static void main(String[] args) { int a = 0xf; System.out.printf("%x\n", ~a); }
比如这个代码结果是fffffff0
按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
移位运算符<< >> >>>
左移 <<: 最左侧位不要了, 最右侧补 0
右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
无符号右移 >>>: 最右侧位不要了, 最左侧补 0
值得注意的是:
- 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
- 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
- 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
条件运算符 表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值
给定一个十进制整数, 如何转成二进制形式? 如何转成十六进制形式?
十进制数转化为二进制
不断除以2就行,最后余数只剩或者1,再把余数倒序排列
同理转化为十六进制也是同样的道理
十进制数转化为十六进制
和十转二进制相似,把要转换的数,除以16,得到商和余数,将商继续除以16,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。
10~15为ABCDEF
这篇关于Java数据类型以及运算符的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20RabbitMQ教程:新手入门指南
- 2024-11-20Redis教程:新手入门指南
- 2024-11-20SaToken教程:新手入门指南
- 2024-11-20SpringBoot教程:从入门到实践
- 2024-11-20Java全栈教程:从入门到实战
- 2024-11-20Java微服务系统教程:入门与实践指南
- 2024-11-20Less教程:初学者快速上手指南
- 2024-11-20MyBatis教程:新手快速入门指南
- 2024-11-20QLExpress教程:初学者快速入门指南
- 2024-11-20订单系统教程:从入门到实践的全面指南