概述
基本数据类型
纯小写英文单词
数据类型 | 存储长度 | 数据范围 |
---|---|---|
byte | 1 byte | [-2^7, 2^7-1] |
short | 2 byte | [-2^15, 2^15-1] |
int | 4 byte | [-2^31, 2^31-1] 约21亿 |
long | 8 byte | [-2^63, 2^63-1] |
float | 4 byte | [-3.403E38, 3.303E38] |
double | 8 byte | [-1.798E308, 1.798E308] |
char | 2 byte | Unicode编码 |
boolean | 无明确规定 | true, false |
-
bite:比特位,二进制中的每一位就是一个bite位,8 bite可写8个2进制数
-
1GB = 1024MB = 1024KB = 1024B (bite)
-
-
byte:字节,计算机的默认存储大小,即表示数据的基本单位,1 byte = 8 bite
-
byte类型:一般用在文件和网络传输中
max: 01111111 --> 2^0*1 + 2^1*1 + ... +2^6*1 = 2^7-1 = 127 java中最高位为符号位,1为负,0为正 -
描述比long类型还大的数据:用java.math.BigInteger类型
-
所有的基本类型都有对应的类类型。除int和char外,其他基本类型的包装类都是首字母大写
引用数据类型
字符串类型
String和char:引用类型和基本类型,分别使用" "和 ' '
转义字符
当碰到特殊字符时,需要转义输出,即告诉计算机这个符号没有特殊含义,不需特殊处理
变量
声明之后值还可以修改
-
变量在定义时可以不赋值,但推荐定义的同时完成初始化
-
局部变量(在方法中定义的变量)必须赋值后才可使用
命名法则
-
硬性指标:
数字、字母、下划线,数字不可开头,大小写敏感。允许中文和美元(不推荐),不允许关键字。
-
软性指标:
命名用英文,命名有意义,使用小驼峰命名法(多个单词时,从第二个单词开始首字母大写)
常量
定义之后值和类型均无法修改,使用final关键字修饰。且所有的字面量也时常量
数据类型转换
只有相同数据类型之间可以转换
小类型转大类型
自动提升
-
小类型变量赋值给大类型 long b = 20; 20由int转为long
-
小类型和大类型进行数学运算 int +long ==> long+long
大类型转小类型
强制转换,可能会丢失精度(数据溢出或数据部分丢失)
常见转化
int和byte之间的转化
对数值型和字符型来说,小于四字节的数据类型,在存储时都会转为四字节,如byte、short、char。这是因为CPU在读写数据时,都是以4字节为单位进行读取和写入的。
byte a = 10;
byte b = 20;
byte c = a + b; //编译不通过,因为a与b会被提升为int类型保存,而int+int ==> int, 当把一个int变量赋值给byte时,无论是否超出范围都需要强制转换
int和char,String之间的转化
- char --> int: 自动提升(2 --> 4字节),按Unicode编码将字符转成int。可转换原因:计算机内部都是0和1组成的二进制码,char字符会按照不同的编码转为int存储
- int --> String: 使用字符串连接符 “+” 或 使用String.valueOf(num)
- String --> int: 调用int包装类Integer.parseInt()方法,转换前提:字符串中只含数字。若字符串中含有非数字,运行出错
运算符
一些坑
整型的溢出
int a = Integer.MAX_VALUE;
a = a + 1
结果
:a = -2147483648
原因
:01111……11 + 00000……01 = 10000……00
字面量
整型的字面量默认为整型
浮点数字面量类型默认是双精度浮点型
long a = 10L; // L,l表示10是一个long型
System.out.print(10 + 1l); // 11L
System.out.print(1 / 2); // 0, reason: int/int==>int
double b = 0.1;
float c = 0.1F; // F,f表float型
浮点数误差
问
:0.1+0.2结果是0.3?
答
: 错误,运行结果0.30000000000000004。因为计算机的内部只可存储0和1,浮点数在计算机内部实际上是通过整数模拟的,因此float和double类型数据运算时可能会有误差。
解决方法
:
-
仍使用double,但只将小数点后6位作为有效位
-
借助java.math.BigDecimal类型
+ 的用法
+:既可以作为*字符串连接符*,又可以作为*加法运算符*(及正数符号,一般不写)
*注:*对每一个+来说,只要+两边的操作数中有一个操作数是字符串类型,则该+就被当做字符串连接符处理,否则当做加法运算符处理
变量的作用域
变量的定义域是变量定义所在的{}中,出了{}不可用
class Test {
public static void main(String[] args) {
{
int x = 10;
System.out.println(x); // 编译通过;
}
System.out.println(x); // 编译失败, 找不到变量 x.
}
}
一些问题
问
:为什么同是4字节,float比int表示的范围大?
答
:底层二进制结构不同
int类型:1个符号位+整数位
float类型:1个符号位+指数位+小数位
问
:一组数中只有一个数出现一次,其余数均出现两次,如何快速找到只出现了一次的这个数字?如 10 20 10 20 30 40 50 40 50
答
:因为相同数字之间做异或,值为0,所以给整组数做异或运算有:
10 ^= 20 ^= 10 ^= 20 ==> 0 40 ^= 50 ^= 40 ^= 50 ==> 0 故 0 ^= 30 ^= 0 ==> 30
最后
以上就是英俊饼干为你收集整理的Java学习笔记—— 基本数据类和运算符基本数据类型引用数据类型变量常量数据类型转换运算符一些坑一些问题的全部内容,希望文章能够帮你解决Java学习笔记—— 基本数据类和运算符基本数据类型引用数据类型变量常量数据类型转换运算符一些坑一些问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复