Skip to content

Latest commit

 

History

History
395 lines (246 loc) · 10.2 KB

二、Java变量.md

File metadata and controls

395 lines (246 loc) · 10.2 KB
title id date auther cover excerpt permalink categories
二、Java变量
fc298374-6ea7-4bf2-afe8-036920b02180
2024-01-26 09:24:45 -0800
tanc
/upload/java.svg
变量是程序的基本组成单位 变量注意事项 one 变量表示内存中的一个存储区域,不同的变量,不同的类型,占用空间的大小不同 two 该区域有自己的名称 three 变量必须先声明,后使用 four 该区域的数据可以在同一类型范围内不断变化 five 变量在同一个作用域内不能重名 J
/archives/ddd06e0c-ea5e-471e-abb3-fe6f45ea5de2
java

变量是程序的基本组成单位

变量注意事项

1️⃣ 变量表示内存中的一个存储区域,不同的变量,不同的类型,占用空间的大小不同

2️⃣ 该区域有自己的名称

3️⃣ 变量必须先声明,后使用

4️⃣ 该区域的数据可以在同一类型范围内不断变化

5️⃣ 变量在同一个作用域内不能重名

Java的数据类型

⭐基本数据类型:
  • 数值型:整数类型,存放整数如:byte[1]short[2]int[4]long[8]

  • ​ 浮点数类型,float[4]double[8]

  • 布尔型: TrueFalseboolean[1]

  • 字符型: char[2],存放当个字符

⭐ 引用数据类型:
  • 接口

  • 数组

数据类型使用

1️⃣ 整形:
类型 占用空间 范围
byte[字节] 1字节 -128-127
short[短整型] 2字节 -2^15·2^15-1(-32768-32767)
int[整形] 4字节 -2^31-2^31-1(-2147483648-2147483647)
long[长整形] 8字节 -2^63-2^63-1

⚠️ int类型注意细节

  • Java每个整形类型都有固定大小,且不受操作系统的影响
  • java整形默认是int,声明long类型需要后面加上'L'或者'l'
public class IntDetal {
	//main方法 
	public static void main(String[] args){
		int n1 = 2;
		// 错误 int n2 = 2L;
		long n3 = 2L; 
	}
}
  • java程序中变量声明为int型,出发不足以表示大数,才使用long
  • bit计算机中最小的存储单位。byte是计算机中基本存储单元,1byte=8bit
2️⃣ 浮点型:
类型 占用 范围
float 单精度 4字节 -3.403E38-3.403E38
double 双精度 8字节 -1.798E308-1.798E308

浮点型在机器中存放形式为符号位+指数位+尾数位尾数部分可能丢失,造成进度损失(小数都是一个近似值)

引用GPT的一句话来解释:

在高级语言编程中,计算得到的小数通常是近似值,而不是精确值。这是由于计算机的二进制表示方式和有限的存储能力导致的。

计算机使用二进制来表示数字,而许多十进制小数无法在有限的二进制位数内准确表示。例如,十进制中的1/3(0.3333...)在二进制中是一个无限循环的小数。因此,计算机在存储这样的小数时只能使用有限的位数,导致了近似值的产生。

此外,浮点数表示法(floating-point representation)在计算机中用于存储小数,它采用科学计数法的形式,包括一个尾数和一个指数。由于浮点数的尾数有限,无法精确表示所有的小数,因此在进行浮点数运算时,可能会出现舍入误差,导致计算结果是近似值。

总的来说,由于计算机的二进制表示和有限的存储能力,高级语言编程中得到的小数通常是近似值而非精确值。

⚠️ 浮点数使用细节

  • 浮点数也有固定长度且不受操作系统影响

  • Java浮点数默认是double,如果要声明float类型就是,后面必须加上'f'或者'F'

    public class FloatDetal {
    	//主方法
    	public static void main(String[] args){
    
    		// 这里也会报错,因为默认是double float f1=0.12;
    		float f3 = 0.12F;
    
    		//错误double范围要比float大 double f2=0.12F;
    
    		double f4 = 0.12;
    
    		double f5 = 0.13F; //对的float范围在double范围之内
    	}
    }
  • 有两种表现形式一种是十进制表示比如5.12,4.23f,.512 ,另一种是科学计数法比如5.12e2[5.12*10^2],5.12E-2[]

    public class FloatDetal {
    	//主方法
    	public static void main(String[] args){
    
    		.....
    
    		//科学计数法
    		double f7 = 5.12e2; //5.12e2 == 5.12*10^2
    		System.out.println(f7); //512.0
    		double f8 = 5.12E-2; //5.12e2 == 5.12/10^2
    		System.out.println(f8);// 0.0512
    	}
    }
  • 通常情况下使用double,比float更加精确

    • 浮点数使用陷阱 ❗ 不要使用计算后的浮点数来做布尔运算,因为计算过的浮点数点是一个无限接近于它本身的值,如果需要判断就需要判断两个数的相减得到的值的绝对值,判断这个值是否在某个精度的范围内

      public class FloatDetal {
      	//主方法
      	public static void main(String[] args){
      		.......
      
      		//浮点数陷阱
      		double f9 = 2.7;
      		double f10 = 8.1/3;
      		System.out.println(f9); //2.7
      		System.out.println(f10); //2.6999999999999997
      
      		if (f9 == f10){
      			System.out.println("这两个数相等"); //不会输出
      		}
      		//判断两个数的相减得到的值的绝对值,在判断这个值是否在某个精度的范围内,我这里定义为0.00000001
      		//表示如果小于0.00000001就认为它们相等
      		if (Math.abs(f9-f10) < 0.00000001){
      			System.out.println("差值很小,达到指定的精确度内"); //输出
      		}
      
      	}
      }
3️⃣ 字符类型:

字符类型单个使用char,多个使用string

⚠️ 字符类型使用细节

  • 字符常量使用单引号括起来的单字符

  • 转义字符为 ""

  • 在java中,char的本质是一个整数,在输出时,是输出unicode码对应的字符Unicode编码转换 - 站长工具 (chinaz.com)

  • char是可以和计算的,使用unicode码计算

    public class Char01 {
    	public static void main(String[] agrs){
    		char c1 = 'a';
    		char c2 = 97;
    		char c3 = 't'+ 1;
    		System.out.println((int)c1); //输出97
    		System.out.println(c2); //输出a
    		System.out.println(c1 + 10); //输出107
    		System.out.println((int)c3); //117
    		System.out.println(c3); //输出ASCII的对应的字符u
    	}
    }

⚠️字符类型本质: 字符型存储到计算机中,需要先将字符的ASCII码值找出来,在转换为二进制然后在保存到计算机中,读取就是反着来

ASCII码

Unicode码:字母和汉字都统一两个字节

utf-8:字母一个字节,汉字3个字节

gbk:字母一个字节,汉字2个字节

gb2312:

big5:繁体中文

4️⃣ 布尔类型:

多用于使用判断和循环的逻辑运算中

⚠️ 这里的True和false不可以使用数字替代

基本数据类型转换

⭐动类型转换

当java程序在进行赋值或者运算时,精度小弟类型自动转换为精度大的数据类型

1️⃣自动转换路线

char --> int --> long --> float --> double 

byte --> short --> int --> long --> float --> double

1️⃣ 测试

public class Transform {
	//主方法
	public static void main(String[] args) {
		//低精度可以转换成高精度
		int a = 'c';
		System.out.println(a); //输出99
	}
}

⚠️自动类型转换注意细节

  • 多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后在进行计算

  • byte,short不能和char自动转换

  • byte,short,char是可以运算的,不过在运算的时候会转换为int类型,只要是参与运算了都会被转换为int

    public class Transform {
    	//主方法
    	public static void main(String[] args) {
    		//低精度可以转换成高精度
    		// int a = 'c';
    		// System.out.println(a); //输出99
    
    
    		int a = 10;
    		float b = 20.1f;
    		double c = 22.1;
    
    		float d = a+b; //浮点型
    		double e = a+c; //double
    		System.out.println(d);
    		System.out.println(e);
    		
    
    
    
    		byte b2 = 1;
    		byte b7 = 4
    		short b3 = 2;
    		char b5 = 'a';
    		short b4 = b2 + b3; //报错 b2+b3变为int类型了
    		short b6 = b2 + b5; //报错和上面一样
    		byte b8 = b2 + b7 //报错和上面一样
    
    	}
    }
  • boolean不参与转换

⭐ 强制类型转换

1️⃣ 比如要强制转换为int格式为(int)a,但是有可能会造成精度降低或溢出,格外要注意

⚠️ 强制类型转换细节:

  • 当进行数据的大小从 大--->小,就需要使用到强制转换

  • 强转符号只针对于一个或者说是最近的一个数有效

  • char类型可以保存int的常量值,但是不能保存int的变量值,需要强转

    //强制类型装换
    
    
    public class CastType {
    	//主函数
    	public static void main(String[] agrs){
    		.....
    
    
    		char c1 = 100;
    		int m = 100;
    		// char c2 = m; //错误char类型不能直接保存int的变量值,这里是将m->100->c2
    		char c3 = (char)m;//这里是将m->100->ASCII->c3
    		// System.out.println(c2);
    		System.out.println(c3);
    	}
    }
  • byte和short会转换为int类型

基本数据类型和String类型的转换

⭐基本数据类型转string语法为,基本数据类型的值+""
public class StringTest { //注意千万不能将类命名为String!
	//主入口
	public static void main(String[] args){
		int n1 = 100;
		float n2 = 1.1f;
		double n3 = 2.2;
		boolean n4 = true;
		String str1 = n1 +"";
		String str2 = n2 +"";
		String str3 = n3 +"";
		String str4 = n4 + "";
		System.out.println(str1+" "+str2+" "+str3+" "+str4); //输出100 1.1 2.2 true
}
string转基本类型
		//String转基本类型
		String n5 = "123"
		String n6 = "1.234"
		int num1 = Integer.parseInt(n5);
		double num2 = Double.parseDouble(n6);

⚠️ 注意事项

  • 将String类型转换成基本数据类型使,要确保String类型能够转换成有效的数据
  • 格式不对就会抛出异常