一、八大基本类型
基本类型 | 大小 | 示例 | 取值范围 |
---|---|---|---|
booleam | 1字节8位 | true | true,false |
byte | 1字节8位有符号整数 | -12 | -128~+127 |
short | 2字节16位有符号整数 | 100 | -32768~`+32767 |
int | 4字节32位有符号整数 | 12 | -2147483648~+2147483647 |
long | 8字节64位有符号整数 | 10000 | -263~+263-1 |
char | 2字节16位Unicode字符 | ‘a’ | 0~65535 |
float | 4字节32位浮点数 | 3.14 | -3.4E38~3.4E38 |
double | 8字节64位浮点数 | -2.4e3D | -1.7E308~1.7E308 |
1.1 整数
byte 字节型 -128~127
-2^7~2^7-1
1字节short 短整型 -32768~32767
-2^15~2^15-1
2字节int 整型 -2147483648~2147483647
-2^31~2^31-1
4字节long 长整型 -9223372036854775808~9223372036854775807
-2^63~2^-1
8字节
1.2 浮点型
float单精度的浮点型
doule双精度的浮点型
1.3 逻辑类型
boolean布尔类型,true/false
1.4 字符型
char 数据长度只能是一位并且使用
'
包起来 2字节
1024字节=1KB
1024KB=1MB
1.5 数值类型
- 整数:byte,short,int,long
- 小数:float,double
理论上来说要为数据选择合适的数据类型,但是一般都是
整数用过int
,小数用double
即可,除特殊要求。定义float后面必须加f
1.6 非数值类型
- char,booleam
char是字符型,用单引号
booleam的值只有true和false
二、引用类型
引用类型的变量它就是指的一个内存地址
,一个位置信息
2.1 引用类型分类
- 类
- 数组
- 接口
- 枚举 ```java package com.xixi.variable;
public class RefVariable { public static void main(String[] args) { String s1 = “中文”; System.out.println(s1); s1 = s1 + “英文”; System.out.println(s1); } }
<a name="Y177E"></a>
## 三、数据类型转换
<a name="vh8ow"></a>
### 3.1 精度排行
`byte < short < int < long < float < double`
<a name="LZ2tw"></a>
###
<a name="WM1t2"></a>
### 3.2 强制转换
> `大转小`,一般都是精度丢失
> 强制符号只针对于`最近的操作数`有效,往往使用`小括号`提升优先级,想转那个类型就往小括号写啥
```java
//强制转换
double dou=99.9;
int bin=(int)dou;
char类型可以保存int的常量值,不能保存int的变量值,需要强转
char a = 100;//ok
int b = 100; //ok
char c = b //false
char c = (char)b //ok
byte和short、char在进行运算时,当作int类型处理
3.3 自动转换
小的转换大的
//自动转换
byte a1=100;
int a2=a1;//byte--->int
double a3=a2;//int---->double
3.3.1 转换规则
- 转换的时候必须要是可以转换的类型,不能把”张三”转换为int
混合运算
的时候结果是最大的那个类型
int a = 10;
float b = a + 1.2;//错误,计算类型为double
容量大
的数据类型赋值容量小
的会报错,反之进行自动类型转换int a = 1.21. //错误 double--int
(byte,short) 和 char 之间不会相互自动转换
byte a = 10;//把具体的值赋值给byte,先判断是否在byte范围内,是则可以
short b =a; //错误
byte、short、char,三者可运算,在计算时先转换为int
byte a = 1;
byte b = 1;
short c = 1;
short d = a + c;//a + c--int
int d = a + c;//正确
byte e = a + b; //a+b--int
boolean不参与转换
boolean pass = true;
int a = pass;//错误
自动提升原则:表达式结果类型自动提升为操作中最大类型
byte a = 1;
short b = 1;
int c = 1;
double d = 1;
double e = a + b + c + d;//正确
int e = a + b + c + d;//错误
3.4 基本数据类型—>String
int n1 = 100;
float f1 = 1.1F;
double d1 = 4.5;
boolean b1 = true;
String s1 = n1 + "";
String s2 = f1 + "";
String s3 = d1 + "";
String s4 = b1 + "";
System.out.println(s1 + "" + s2 + "" +s3 + "" + s4);
3.5 String —>对应的基本数据类型
使用基本数据类型对应的包装类,相应方法,得到基本数据类型
String s5 = "123";
int num1 = Integer.parseInt(s5);
double num2 = Double.parseDouble(s5);
float num3 = Float.parseFloat(s5);
long num4 = Long.parseLong(s5);
byte num5 = Byte.parseByte(s5);
boolean b = Boolean.parseBoolean("true");
short num6 = Short.parseShort(s5);
System.out.println(num1);//123
System.out.println(num2);//123.0
System.out.println(num3);//123.0
System.out.println(num4);//123
System.out.println(num5);//123
System.out.println(num6);//123
System.out.println(b);//true
//字符串转换成char,得到字符串第一个字符
//s5.charAt(0)得第一个字符
System.out.println(s5.charAt(0));
在将string类型转成基本数据类型时,确保string类型能转成有效的数据,123可装成整数,但不能把hello转成整数格式不正确,会抛出异常,程序终止
四、数据类型拓展及面试题
4.1 整数拓展
- 二进制:0b开头
- 八进制:0开头
- 十六进制:0x开头
public class Demo1 {
public static void main(String[] args) {
int i=10;
int i_2=0b10;//二进制 0b 开头
int i_8=010;//八进制 0 开头
int i_16=0x10;//十六进制 0x 开头
System.out.println(i);
System.out.println(i_2);
System.out.println(i_8);
System.out.println(i_16);
}
}
4.2 浮点数拓展
银行业务中,钱怎么表示?
避免使用浮点数进行比较
浮点数是不精确的(有限的;离散的;有舍入误差的;大约;接近但不等于)
public class DataTypeDemo {
public static void main(String[] args)
//浮点数
float f=0.1f; //0.1
double d=1.0/10; //0.1
System.out.println(f==d);
//期望输出true,但实际输出false
float d1=1234424234523422342343421f;//这里数小了会输出false
float d2=d1+1;
System.out.println(d1==d2);
//期望输出false,但实际输出true
}
}
所以在遇到银行业务这类需要比较浮点数的情况,使用BigDecimal类(数学工具类)
五、JAVA输出中+号使用
- 则做
加法
运算- 当左右两边有一方为字符串,则做
拼接
运算
System.out.println(1+2); //3
System.out.println("1"+"2")//12
System.out.println("1"+2)//12
六、char使用
JAVA中,char占2
字节,16
位,可在存放汉字
6.1 char赋值
char a=’a’; //任意单个字符,加单引号
char a=’中’;//任意单个中文字,加单引号
char a=111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符
注:只能放单个字符
6.2 char运算
char类型是可以运算的因为char在ASCII等字符编码表中有对应的数值
在JAVA中,对char类型字符运行时,直接当做ASCII表对应的整数来对待。
char m='a'; //a
char m='a'+'b'; //A char类型相加,提升为int类型,输出对应的字符
int m='a'+'b'; //195,195没有超出int范围,直接输出195
char m='a'+b; //报错,因为b是一个赋值的变量
char m='a'+1; //b,提升为int,计算结果98对应的字符是b
char m='a'+1; //b,提升为int,计算结果98对应的字符是b
char m='中'+'国'+'国'+'国'; //报错,int转char有损失。因为结果已经超出char类型的范围
int m='中'+'国'+'国'+'国'; //86820
char m='中'+"国"; //报错,String无法转换为char
System.out.println('中'+"国"); //中国,没有变量附值的过程。String与任何字符用“+”相连,转换为String。
6.3 总结
用单引号``''
标识,只能放单个字符。
char+char,char+int——类型均提升为int,附值char变量后,输出字符编码表中对应的字符。
七、产生随机数
int x=(int)(Math.random()*10);
7.1 数据比较:
- 八大本类型:用==比较。
- 对象类型:只能用equals来比较。
- equals方法如果数组值为空会报错
string[] str={"12","13",null};
string deta="12";
if(str[i].equls(deta))//当str[3]是会报错,因为str[3]为空值换成deta.equls(str[i])就不会报错了
String s1 = "tom";
String s2 = "hello";
System.out.println(s1.equals(s2));
//结果:false
八、变量
8.1 变量的概念
- 内存中的一个存储区域【不同的变量,类型不同,占用空间大小不同 int占4个字节,double占8个节】
- 该区域有自己的名称(变量名)和类型(数据类型)和值
- Java中每个变量必须先声明,再赋值,然后才能使用
- 该区域的数据可以在同一类型范围内不断变化
- 变量在同一作用域内不能重名
- Java 中的变量有四个基本属性:数据类型、变量名、存储单元、变量值
8.2 变量声明格式
数据类型 变量名 [=初始值] [,变量名 [=初始值]…]; int age = 19
8.3 变量的声明
- 如果你只定义一个变量,没有给变量进行赋值的话,那么其实这个变量相当于没有定义
- 变量如果没有进行赋值的话,那么使用的时候会出错,告诉你:尚未初始化变量
8.4 变量的赋值
int age = 10; 变量的值可以更改
8.5 注意事项
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型
- 变量名必须是合法的标识符
- 变量声明说一条完整的语句,因此每一个声明都必须是以分号结束
8.6 变量作用域🌸
类变量
类变量(修饰符static):static+数据类型+变量名
可以不初始化 可以在方法中直接调用
实例变量
在类里,方法外,从属于对象
int age;//0
如果不自行初始化,这个类型的默认值 0,0.0
布尔值:默认是false;除了基本类型,其他的默认值都是null;
局部变量
必须声明和初始化值,只在方法内有效,int a= 666;
```java public class Test05 { //类变量 static double salary = 2000; //属性 / 实例变量:从属于对象,如果不自行初始化,将会是这类型的默认值 整数:0 小数:0.0 布尔值:false 除了基本类型,其余默认值都是null / String name; int age;
//main方法 public static void main(String[] args) {
//局部变量:必须声明和初始化值
int i = 10;
System.out.println(i);
//变量类型 变量名字 = new Test05()
Test05 test05 = new Test05();
System.out.println(test05.age);
System.out.println(test05.name);
//类变量 static
System.out.println(salary);
} //其他方法 public void add(){
} }
<a name="IWt2i"></a>
###
<a name="PNAPi"></a>
### 8.7 变量的命名规范🌺
- 所有的变量、方法、类名:见名知意
- **类成员变量**:首字母小写和驼峰原则,除了第一个字母小写,后面单词首字母大写:lastName
- **局部变量**:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man
- **方法名**:首字母小写和驼峰原则:runRun
<a name="i1FFQ"></a>
# 九、常量
<a name="P6dN7"></a>
## 9.1 常量的概念💋
- 常量:初始化后不能再改变值,不会变动的值
- 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变
```java
final 常量名 = 值;
final double PI = 4.56;
例:
public class Test06 {
//修饰符 不存在先后顺序
static final double PI = 4.56;
public static void main(String[] args) {
System.out.println(PI);
}
}
9.2 常量的分类
- 整数常量: 所有的整数 例如
100 -100 123 456
等等 - 小数常量: 所有的小数 例如
1.2
3.14
等等 - 字符常量: 用单引号引起来的单个字符,单引号中必须是单个字符,并且不能没有字符 例如
'a'
'1'
'0'
等等 - 布尔常量: 只有2个值,一个是
true
(真\成立),一个是false
(假\不成立) - 字符串常量:用双引号引起来的内容(多个字符),双引号中可以没有字符, 例如
""
"a"
"abc"
"10"
等等 - 空常量:
null
(引用数据类型)
注:
- 要区分字符常量和字符串常量,字符常量用单引号,字符串常量用双引号。
- 一般用关键字final表明,有此关键字的常量不允许被改变。