一、八大基本类型

基本类型 大小 示例 取值范围
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-12字节

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

1024MB=1GB

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); } }

  1. <a name="Y177E"></a>
  2. ## 三、数据类型转换
  3. <a name="vh8ow"></a>
  4. ### 3.1 精度排行
  5. `byte < short < int < long < float < double`
  6. <a name="LZ2tw"></a>
  7. ###
  8. <a name="WM1t2"></a>
  9. ### 3.2 强制转换
  10. > `大转小`,一般都是精度丢失
  11. > 强制符号只针对于`最近的操作数`有效,往往使用`小括号`提升优先级,想转那个类型就往小括号写啥
  12. ```java
  13. //强制转换
  14. double dou=99.9;
  15. int bin=(int)dou;
  • char类型可以保存int的常量值,不能保存int的变量值,需要强转

    1. char a = 100;//ok
    2. int b = 100; //ok
    3. char c = b //false
    4. char c = (char)b //ok
  • byte和short、char在进行运算时,当作int类型处理

    3.3 自动转换

    小的转换大的

  1. //自动转换
  2. byte a1=100;
  3. int a2=a1;//byte--->int
  4. double a3=a2;//int---->double

3.3.1 转换规则

  • 转换的时候必须要是可以转换的类型,不能把”张三”转换为int
  • 混合运算的时候结果是最大的那个类型

    1. int a = 10;
    2. float b = a + 1.2;//错误,计算类型为double
  • 容量大的数据类型赋值容量小的会报错,反之进行自动类型转换

    1. int a = 1.21. //错误 double--int
  • (byte,short) 和 char 之间不会相互自动转换

    1. byte a = 10;//把具体的值赋值给byte,先判断是否在byte范围内,是则可以
    2. short b =a; //错误
  • byte、short、char,三者可运算,在计算时先转换为int

    1. byte a = 1;
    2. byte b = 1;
    3. short c = 1;
    4. short d = a + c;//a + c--int
    5. int d = a + c;//正确
    6. byte e = a + b; //a+b--int
  • boolean不参与转换

    1. boolean pass = true;
    2. int a = pass;//错误
  • 自动提升原则:表达式结果类型自动提升为操作中最大类型

    1. byte a = 1;
    2. short b = 1;
    3. int c = 1;
    4. double d = 1;
    5. double e = a + b + c + d;//正确
    6. int e = a + b + c + d;//错误

3.4 基本数据类型—>String

  1. int n1 = 100;
  2. float f1 = 1.1F;
  3. double d1 = 4.5;
  4. boolean b1 = true;
  5. String s1 = n1 + "";
  6. String s2 = f1 + "";
  7. String s3 = d1 + "";
  8. String s4 = b1 + "";
  9. System.out.println(s1 + "" + s2 + "" +s3 + "" + s4);

3.5 String —>对应的基本数据类型

使用基本数据类型对应的包装类,相应方法,得到基本数据类型

  1. String s5 = "123";
  2. int num1 = Integer.parseInt(s5);
  3. double num2 = Double.parseDouble(s5);
  4. float num3 = Float.parseFloat(s5);
  5. long num4 = Long.parseLong(s5);
  6. byte num5 = Byte.parseByte(s5);
  7. boolean b = Boolean.parseBoolean("true");
  8. short num6 = Short.parseShort(s5);
  9. System.out.println(num1);//123
  10. System.out.println(num2);//123.0
  11. System.out.println(num3);//123.0
  12. System.out.println(num4);//123
  13. System.out.println(num5);//123
  14. System.out.println(num6);//123
  15. System.out.println(b);//true
  16. //字符串转换成char,得到字符串第一个字符
  17. //s5.charAt(0)得第一个字符
  18. System.out.println(s5.charAt(0));

在将string类型转成基本数据类型时,确保string类型能转成有效的数据,123可装成整数,但不能把hello转成整数格式不正确,会抛出异常,程序终止

四、数据类型拓展及面试题

4.1 整数拓展

  • 二进制:0b开头
  • 八进制:0开头
  • 十六进制:0x开头
    1. public class Demo1 {
    2. public static void main(String[] args) {
    3. int i=10;
    4. int i_2=0b10;//二进制 0b 开头
    5. int i_8=010;//八进制 0 开头
    6. int i_16=0x10;//十六进制 0x 开头
    7. System.out.println(i);
    8. System.out.println(i_2);
    9. System.out.println(i_8);
    10. System.out.println(i_16);
    11. }
    12. }
    image.png

    4.2 浮点数拓展

    银行业务中,钱怎么表示?

避免使用浮点数进行比较
浮点数是不精确的(有限的;离散的;有舍入误差的;大约;接近但不等于)

  1. public class DataTypeDemo {
  2. public static void main(String[] args)
  3. //浮点数
  4. float f=0.1f; //0.1
  5. double d=1.0/10; //0.1
  6. System.out.println(f==d);
  7. //期望输出true,但实际输出false
  8. float d1=1234424234523422342343421f;//这里数小了会输出false
  9. float d2=d1+1;
  10. System.out.println(d1==d2);
  11. //期望输出false,但实际输出true
  12. }
  13. }

所以在遇到银行业务这类需要比较浮点数的情况,使用BigDecimal类(数学工具类)

五、JAVA输出中+号使用

  • 则做加法运算
  • 当左右两边有一方为字符串,则做拼接运算
  1. System.out.println(1+2); //3
  2. System.out.println("1"+"2")//12
  3. 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表对应的整数来对待。

  1. char m='a'; //a
  2. char m='a'+'b'; //A char类型相加,提升为int类型,输出对应的字符
  3. int m='a'+'b'; //195,195没有超出int范围,直接输出195
  4. char m='a'+b; //报错,因为b是一个赋值的变量
  5. char m='a'+1; //b,提升为int,计算结果98对应的字符是b
  6. char m='a'+1; //b,提升为int,计算结果98对应的字符是b
  7. char m='中'+'国'+'国'+'国';  //报错,int转char有损失。因为结果已经超出char类型的范围
  8. int m='中'+'国'+'国'+'国';  //86820
  9. char m='中'+"国";  //报错,String无法转换为char
  10. System.out.println('中'+"国");  //中国,没有变量附值的过程。String与任何字符用“+”相连,转换为String。

6.3 总结

单引号``''标识,只能放单个字符。
char+char,char+int——类型均提升为int,附值char变量后,输出字符编码表中对应的字符。

七、产生随机数

int x=(int)(Math.random()*10);

7.1 数据比较:

  • 八大本类型:用==比较。
  • 对象类型:只能用equals来比较。
  • equals方法如果数组值为空会报错
    1. string[] str={"12","13",null};
    2. string deta="12";
    3. if(str[i].equls(deta))//当str[3]是会报错,因为str[3]为空值换成deta.equls(str[i])就不会报错了
    1. String s1 = "tom";
    2. String s2 = "hello";
    3. System.out.println(s1.equals(s2));
    4. //结果: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 变量作用域🌸

  • 类变量

    1. 类变量(修饰符static):static+数据类型+变量名

    可以不初始化 可以在方法中直接调用

  • 实例变量

    1. 在类里,方法外,从属于对象
    1. int age;//0
    2. 如果不自行初始化,这个类型的默认值 0,0.0
    3. 布尔值:默认是false;除了基本类型,其他的默认值都是null
  • 局部变量

    1. 必须声明和初始化值,只在方法内有效,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) {

    1. //局部变量:必须声明和初始化值
    2. int i = 10;
    3. System.out.println(i);
    4. //变量类型 变量名字 = new Test05()
    5. Test05 test05 = new Test05();
    6. System.out.println(test05.age);
    7. System.out.println(test05.name);
    8. //类变量 static
    9. System.out.println(salary);

    } //其他方法 public void add(){

    } }

  1. <a name="IWt2i"></a>
  2. ###
  3. <a name="PNAPi"></a>
  4. ### 8.7 变量的命名规范🌺
  5. - 所有的变量、方法、类名:见名知意
  6. - **类成员变量**:首字母小写和驼峰原则,除了第一个字母小写,后面单词首字母大写:lastName
  7. - **局部变量**:首字母小写和驼峰原则
  8. - 常量:大写字母和下划线:MAX_VALUE
  9. - 类名:首字母大写和驼峰原则:Man
  10. - **方法名**:首字母小写和驼峰原则:runRun
  11. <a name="i1FFQ"></a>
  12. # 九、常量
  13. <a name="P6dN7"></a>
  14. ## 9.1 常量的概念💋
  15. - 常量:初始化后不能再改变值,不会变动的值
  16. - 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变
  17. ```java
  18. final 常量名 = 值;
  19. final double PI = 4.56;

例:

  1. public class Test06 {
  2. //修饰符 不存在先后顺序
  3. static final double PI = 4.56;
  4. public static void main(String[] args) {
  5. System.out.println(PI);
  6. }
  7. }


9.2 常量的分类

  • 整数常量: 所有的整数 例如 100 -100 123 456等等
  • 小数常量: 所有的小数 例如 1.2 3.14等等
  • 字符常量: 用单引号引起来的单个字符,单引号中必须是单个字符,并且不能没有字符 例如 'a' '1' '0' 等等
  • 布尔常量: 只有2个值,一个是true(真\成立),一个是false(假\不成立)
  • 字符串常量:用双引号引起来的内容(多个字符),双引号中可以没有字符, 例如 "" "a" "abc" "10" 等等
  • 空常量:null(引用数据类型)

注:

  • 要区分字符常量和字符串常量,字符常量用单引号,字符串常量用双引号。
  • 一般用关键字final表明,有此关键字的常量不允许被改变。