java基础2

本文详细介绍了Java中的基本数据类型(如int,long,double,float,char)和引用类型,包括它们的使用、整数运算中的溢出问题以及浮点数的精度问题。还讨论了变量的命名规则和初始化重要性。
摘要由CSDN通过智能技术生成

1. java中的数据类型

1. 基本数据类型和引用数据类型

image-20230720170528556

// 数据类型: ①基本数据类型, ②引用数据类型
// 除了8中基本数据类型之外,其他都是应用类型
public class DateTypeDemo{
    public static void main(String[] args){
        int a;
        a = 10;
        System.out.println(a);  // 输出的是a的数据值, 因为a是基本数据类型
        int[] arr = new int[10]; // 数组创建之后,每个元素初始化为0。
        System.out.println(arr); // [I@43a25848] , 输出的是变量arr 对应的 数据的引用地址, 因为arr 中保存的是引用地址。   // arr是引用类型
        Scanner scanner = new Scanner(System.in);  //  变量scanner是引用类型。
        System.out.println(scanner);  //  变量scanner是引用类型
        double m = 1.5;
        System.out.println(m); // 基本数据类型
    }
}

2. java中的8种基本数据类型

image-20230720173653414

2. int类型的使用

  • int是最常用的整数类型。一个int类型占用4个字节(32位),

    最大表示范围为:-2147483648 ~ 2147483647

  • 整数类型的直接量(literal)默认是int类型。

    int a =100;

    int b = 10000000000; // 编译错误:直接量超出了整整型的范围

  • 整数直接量,需要注意一下两点:

    ​ -整数直接量默认是int类型,那么就不能超过int 类型能表示的数据范围。

    ​ -整数直接量,除了可以用十进制表示以外,还可以用十六进制表示(以0x或0X开头),八进制表示(以0开头)。

  • 两个int整数相除(/),结果取整,舍弃小数部分(非四舍五入),结果还是整数

	// eg1:
	int a = 5/3;  // 取整
	// eg2:
	int currentProgress = 33;
	int totalProgress / totalProgress * 100; // 结果percent = 0
	System.out.println(percent+"%");  // 0%
	percent = 100*currentProgress / totalProgress;  // 结果66
	System.out.println(percent+"%");  // 66%
  • 整数运算要防止溢出

    -整数运算的过程中,运算结果,如果超过了整数能表示的最大范围,会发生溢出。

    ​ 正数过大溢出,结果变为负数;负数过小溢出,结果变为正数

		// 整数运算要防止溢出
		int max = Integer.MAX_VALUE;
		System.out.println("---------正数溢出变为负数---------");
		System.out.println(max + 1); // -2147483648
		int min = Integer.MIN_VALUE;
		System.out.println("----------负数溢出变为正数---------------");
		System.out.println(min - 1); // 2147483647
		// 通过改变参与运算的数据类型,避免溢出。
		//  *** java中规定,数据运算的结果,以范围大的数据类型为准。
		// max + 1L: 参与运算的数据结果,以大类型为准。
		long max1 = (long)(max1 + 1L); // int 运行的结果就是int类型, int + long运算结果就是long类型
		long min1 = (long)(min1 - 1L);
		System.out.println("最大值+1:" + max1);  //2147483648
		System.out.println("最小值-1:" + min1); //-2147483649

java中规定,数据运算的结果,以范围大的数据类型为准

		int k1 = 30;
		long k2 = 300;
		float k3 = 3.3F;  // 字面量后加F , 就表示是float类型,如果不加,则编译错误:大类型转 小类型需要强转
		double k4 = 2.5; // 字面量2.5 , 默认是double类型。
		// k1 + k2 是long
		long sum = k1 + k2;
		// k1 + k2 + k3 是float
		float sum1 = k1 + k2 + k3;
		// k1 + k2 + k4 是double
		double sum2 = k1 + k2 + k4;
		// k1 + k2 + k3 + k4 是double
		double sum3 = k1 + k2 + k3 + k4;
		

3. long类型的使用

  • 如果要表示的整数已经超过了int的范围,那么可以用long类型定义变量,保存数据。

    ​ long类型数据范围(8个字节,64位):

    ​ -9223372036854775808~9223372036854775807

    ​ long类型直接量的表示,需要在数据后面加上一个L或l;

    ​ eg: long data1 = 10000000000; // 编译错误: 100亿

    ​ long data2 = 10000000000L;

    ​ long data3 = 10000000000l;

  • 通过long类型来存储系统当前毫秒数,jdk提供了一个方法(System.currentTimeMillis()),来获取从1970.1.1日零时至今的毫秒数,返回结果为long。

    eg: long times = System.currentTimeMillis();

    ​ System.out.println(times);

  • 对于较大的整数运算(超出int范围),可以使用long型。

public static void main(String[] args){
      long time = System.currentTimeMillis();
    System.out.println(time);
    // int time1 = time;  // 数据类型不匹配(大范围的数据值,不能直接赋值给小范围的)
    // 强制数据类型转换。 (可能会溢出)
    int time1 = (int)time;  // 解决了语法错误。因为time数值大于int的最大值,所以这里溢出。
    System.out.println(time1); //1741132227
    // 对于较大的整数运算(超出int范围),可是使用long型
    // 三个1000相乘*10
    long one = 1000*1000*1000*10;
    System.out.println(one); 1410065408 --- 溢出了
    long two = 1000*1000*1000*10L;
    System.out.println(two); // 10000000000-- 100亿。运算结果由大的数据范围决定。
    // 2个1000*1000*10;
    //在Java中,表达式的计算顺序是从左往右的,也就是先计算左侧的结果,再计算右侧的结果
    long three = 1000*1000*10000*10L; //还没计算到10L就已经溢出 ,虽然10L字面量是float类型
    System.out.println(three); // 14100654080 -- 溢出了
    long four = 1000L*1000*10000*10; // 开头计算就遇到float类型,范围扩大,不会溢出
    System.out.println(four); // 100000000000 , 先保证运算结果就是long了,避免数据的溢出
  }

4. double & float的使用

  • 所谓的浮点类型就是小数类型,包含double和float。

    浮点类型的默认直接量是double类型。

    如果要使用float类型,需要在数据后面加F或f。

    double类型的精度比float类型的精度高,因此,一般用double类型。

    eg

    float f1 = 3.3F;

    double money = 3.5;

  • double类型数据运算的时候,会有舍入误差。

    由于舍入误差,导致浮点数不能精确运算。二进制中无法表示1/10,就像十进制中无法精确表示1/3,所以二进制表示浮点数存在误差

    eg:

    double a = 3.0;

    double b = 2.9;

    double c = a - b;

    System.out.println©;

public class DoubleDemo{
  public static void main(String[] args){
      double a = 1.5;
    // float b = a;  // a 是大的数据类型, 直接赋值给小类型,出现错误。
    float b = (float)a; // 强制类型转换
    // float c = 1.5; //编译错误:java中默认浮点数是double类型
    float c = 1.5F; // 在数据类型之后添加F/f, 让直接量是float类型
    double d = 2.0F; // 小类型的数据,可以直接赋值大类型的数据。
    float e = 2;  // 2 是int(直接量)类型,小类型的数据,可以直接赋值大类型的数据
    // double 类型数据运算的时候,会有舍入误差。
    double a1 = 3.0;
    double a2 = 2.9;
    System.out.println(a1-a2); // 0.10000000000000009
    System.out.println(a1+a2); //
    System.out.println(a1*a2); //
    System.out.println(a1/a2); //
    System.out.println("---------BigDecimal类型的使用-----------");
    BigDecimal bigDecimal = new BigDecimal("3.0");
    BigDecimal bigDecimal1 = new BigDecimal("2.9");
    BigDecimal bi = bigDecimal.subtract(bigDecimal1); // subtract  -- 减法
    System.out.println(bi);
    System.out.println("---------BigInteger类型的使用-----------");
    BigInteger bigInteger = new BigInteger("92233720368547758070");//long的最大值:9223372036854775807
    System.out.println(bigInteger);
    BigInteger bigInteger1 = new BigInteger("100");
    BigInteger bi1 = bigInteger.divide(bigInteger1); // divide -- 除法运算
    System.out.println(bi1);
  }
}

5. char类型的使用

  • 字符类型实质上是一个16位的无符号整数,这是整数对应的字符编码

    Java字符类型采用Unicode字符集编码。Unicode字符编码是国际上通用的定长字符集,所有字符都是16位。

    字符直接量,可以采用字符集的形式,比如’中‘;

    或者采用Unicode编码的方式,比如char c = ‘A’ ; int a = 10 + c; // 75(65+10)

  • 字符直接量赋值

    整数赋值(0~65536)

    Unicode编码赋值

    ​ eg: char a = ‘A’;

    ​ char a = 65;

    ​ char a = ‘\u0045’;

  • char类型–转义字符:转义字符(\):对于不方便输出的字符,采用转义字符表示。

    image-20230720191908676

// char类型的使用
char c1 = 'a';  // 'a' -- 单引号表示char类型。
// char c2 = "a"; // 编译错误: -- 双引号表示String类型。
// char的本质是整数
int a1 = c1;  // c1 的本质及时整数
a1 = c1 + 1; // char类型可以做数学运算
// int是4个字节,char是2个字节。大数据不能直接赋值给小数据。
// char c2 = a1;  // 编译错误
char c2 = (char)a1;
System.out.println("c2:"+c2);

// short : 短整型 , 2 个字节
short s1 = 99;
char c3 = (char)s1;
// byte :整形, 1个字节

byte s2 = 100;
char c4 = (char)s2;
System.out.println("c3:"+c3);
System.out.println("c4:"+c4);

6. 变量使用

// ***变量命名遵循java得到命名规则,先定义变量,再使用变量。在使用变量之前,需要先对变量进行初始化
public class Demo1{
    public static void main(String[] args) {
        // 1. 一条语句声明三个整形变量:a , b , c
        int a, b ,c;
        // 2. 输出变量
        // Sysytem.out.println(a); // 编译错误:先初始化,再使用
        // 3.给变量b赋值为5,给变量c赋值为6;
        // b = 5,c = 6; // 编译错误:赋值语句结束,要使用“;”,不能使用”,“
        // 4.声明boolean类型变量b,初始化为false
        // boolean b = false;  // 编译错误:同代码区域内,不允许变量名重复
		// 5.声明boolean类型变量m,赋值为b>c
        // boolean m = b > c; // 编译错误:先初始化,再使用
        // 6.声明double类型变量A, 赋值为5.
        double A = 5;
        // 7. 输出double类型变量B的值
        double B;
        // System.out.println(B);// 编译错误:先初始化,再使用
        // 8. 声明long类型变量 *,赋值为10
        // long * = 10; // 编译错误:不符合变量命名规则(只能出现:字母,数字,_,$)
        // 9.声明long类型变量goto,赋值为20
        // long goto = 20;  // 编译错误:不能使用关键字做变量名。
        // 10.一条语句声明三个在整型变量,a1,a2,a3, 分别赋值为1,2,3,输出三个数据的乘积。
        int a1=1,a2=2,a3=3;
        System.out.println("乘积:"+a1*a2*a3);
        // 11.声明一个String类型变量address, 赋值为"hello world";
        String address = "hello world";
		// 12.输出变量addrses
        // System.out.println(addrses); // 编译错误: 先定义变量,再使用变量 
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值