这是一篇对JAVA数据类型与运算符的简单梳理框架以及注意事项
一、变量和类型
1.整型变量
int num=10;
system.out.println(num);
int占四个字节(-2^31~2^31)和操作系统没有直接关系.
2.长整形变量
long num=10L;
system.out.println(num);
L最好大写以免与1相似,long占八个字节(-2^63~2^63)
3.双精度浮点型变量
double num=1.0;
system.out.println(num);
在Java中int除以int的值依旧是整型int(如有小数则会直接舍弃小数部分只留整数部分)。
double占八个字节,但因为浮点数的内存布局与整数相差很大,不能直接用2^n的形式表示范围。
4.单精度浮点型变量
float num=1.0f;
system.out.println(num);
float占四个字节,但精度范围较小,一般优先考虑double。
5.字符类型变量
char ch='A';
system.out.println(ch);
java中用Unicode表示字符,一个字符占用两个字节,表示的字符种类很多包括中文。
6.字节类型变量
byte value =0;
System.out.println(value);
字节类型表示的也是整数,只占一个字节表示的范围较小(-128~127)
7.短整型变量
short value =0;
system.out.println(value);
short占用两个字节(-32768~32767)
8.布尔类型变量
boolean value =0;
System.out.println(value);
boolean类型的变量只有true和false两种取值(真和假)。
Java的boolean类型和int类型不能相互转换。
Boolean有些占一个字节但没有明确规定。
9.字符串类型变量
string name ="zhangsan";
System.out.println(name);
与上面不同,string是引用类型。
字符串中一些不太方便表示的字符需要转义。
//创建一个字符串 My name is "张三"
string name ="My name is\"张三\""
转义字符 | 解释 |
\n | 换行 |
\t | 水平制表符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
二、常量
1.字面值常量
10/010/0x10/10L/1.0/1.5e2/1.0f/true/'a'/"abc"
2.fianl关键字修饰的常量
final int a=10;
a=20;//编译出错,无法为最终变量a分配值
常量不能在运行过程中发生修改。
三、相关规则
1.变量的作用域
变量生效的范围是变量定义所在的代码块(即变量定义所在的大括号)
{
{
int x=10;
System.out.println(x);//编译通过
}
System.out.println(x);//编译失败,找不到变量x
}
2.变量命名的规则
- 变量名只能包含数字,字母,下划线(也可有¥$)
- 数字不能开头
- 推荐小驼峰命名法(当变量名由多个单词组成的时候,除了第一个单词之外,其他单词首字母都大写)
3.理解类型转换
long 表示的范围更大,可以将 int 赋给给 long,但是不能将 long 赋给 int.
double 表示的范围更大,可以将 int 赋值给 double ,但是不能将double赋值给int.
- 不同数字类型的变量之间赋值,表示的范围更小的类型能隐式转换成范围较大的类型,反之则不能。
- int 和boolean是毫不相干的两种类型,不能相互赋值。
- 使用字面值常量赋值的时候,Java会自动进行一些检查校验,判断赋值是否合理。
- 强制类型转换可能导致精度丢失,而且不一定可以成功,互不相干的类型之间无法强转。
4.理解数值提升
int a= 10;
long b= 20;
int c= a+b;//编译出错,提示将long转化成int会丢失精度
long d= a+b;//编译成功
- 当int和long混合运算的时候,int会提升成long,而int可以转化成long而long不可以转化成int,如果非要用int来接受结果则需要进行强制类型转换。
byte a=10;
byte b=20;
byte c=a+b;
System.out.println(c);//编译报错
- byte和byte是相同的类型但是计算a+b会先将a和b都提升成int在进行计算,所以最后的结果也是int型赋给c。
- 由于计算机的cpu通常是按照四个字节为单位从内存中读取数据,所以像byte和short这种低于四个字节的类型会先提升为int再参与计算。
5.int和string之间的相互转换
int num =10;
//方法一
string str1 = num+"";
//方法二
string str2 = string.valueof(num);
string str ="100";
int num =integer.parseInt(str);
四、运算符
1.算数运算符
- int除以int 还是int,需要计算的话应使用double。
- 0不能做除数。
- %表示除余
- 增量赋值运算符+= -= *= /= %=(a+=1就是a=a+1)
- 自增自减运算符++ --
2.关系运算符
- == != < > <= >=
- 关系运算符的表达式返回值都是boolean类型
3.逻辑运算符
- && || !(操作数和返回值都是boolean)
- 前两者都是短路求值的规则,对于&&,如果左侧表达式值为false,则表达式的整体的值一定是false,无需计算右侧表达式;对于||,如果左侧表达式为true则整体的值一定是true,无需计算右侧表达式。
4.位运算符
- &(按位与) | (按位或) ~ (按位取反) ^(按位异或)
- java当中对数据操作的最小单位不是字节而是二进制
5.移位运算
- << >> >>>(都是按照二进制来运算)
- << 最左侧不要了,最右侧补0.
- >> 最右侧不要了,最左侧补0.(正数补0,负数补1)
- >>> 无符号右移,最右侧位不要了,最左侧补0
6.条件运算符
- 表达式1?表达式2:表达式3
- Java中唯一的三目运算符
补充:给定一个十进制整数,如何转化成二进制形式,如何转化成十六值形式?
转化成二进制:除二取余,自下而上。
转化成十六进制:除十六取余,自下而上。