JavaSE-02变量和数据类型

变量

变量是可变的,如x,y。分为两种,基本类型的变量和引用类型的变量。

基本数据类型

基本数据类型是CPU可以直接进行运算的类型。Java定义了以下几种基本数据类型:

  • 整数类型:byte,short,int,long
  • 浮点数类型:float,double
  • 字符类型:char
  • 布尔类型:boolean

基本数据类型在定义变量时使用,目的是在内存里开辟空间。此时变量就是这空间的地址,根据这个地址,获取这个空间存储的数据。

注:布尔类型boolean只有truefalse两个值。

举例:

public class Main {
    public static void main(String[] args) {
        int x = 100; // 定义int类型变量x,并赋予初始值100
        System.out.println(x); // 打印该变量的值
      
      	float y = 100F;//100f
      	double d = 100;
      	char = '97';
      	boolean b = true;
      	
      
    }
}

基本数据类型在内存开辟的大小:

  • byte 1字节
  • short 2字节
  • int 4字节
  • long 8字节
  • float 4字节
  • double 8字节
  • char 8字节
  • boolean 1bit

引用类型

除了上述基本类型的变量,剩下的都是引用类型。例如,引用类型最常用的就是String字符串:

String s = "hello";

还有使用类 定义变量存储类。

常量

定义变量的时候,如果加上final修饰符,这个变量就变成了常量:

final double PI = 3.14; // PI是一个常量

常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。

var关键字

有些时候,类型的名字太长,写起来比较麻烦。例如:

StringBuilder b = new StringBuilder();

这个时候,如果想省略变量类型,可以使用var关键字:

var b = new StringBuilder();

编译器会根据赋值语句自动推断出变量b的类型是StringBuilder

变量的作用范围

在Java中,多行语句用{ }括起来。很多控制语句,例如条件判断和循环,都以{ }作为它们自身的范围,例如:

if (...) { // if开始
    ...
    while (...) { // while 开始
        ...
        if (...) { // if开始
            ...
        } // if结束
        ...
    } // while结束
    ...
} // if结束

只要正确地嵌套这些{ },编译器就能识别出语句块的开始和结束。而在语句块中定义的变量,它有一个作用域,就是从定义处开始,到语句块结束。超出了作用域引用这些变量,编译器会报错。举个例子:

{
    ...
    int i = 0; // 变量i从这里开始定义
    ...
    {
        ...
        int x = 1; // 变量x从这里开始定义
        ...
        {
            ...
            String s = "hello"; // 变量s从这里开始定义
            ...
        } // 变量s作用域到此结束
        ...
        // 注意,这是一个新的变量s,它和上面的变量同名,
        // 但是因为作用域不同,它们是两个不同的变量:
        String s = "hi";
        ...
    } // 变量x和s作用域到此结束
    ...
} // 变量i作用域到此结束

定义变量时,要遵循作用域最小化原则,尽量将变量定义在尽可能小的作用域,并且,不要重复使用变量名。

自动转换

变量赋值时,发生自动转换的赋值:

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

容量小的可以自动转换赋值给容量大的数据类型变量。charbyteshort 不能相互转化,而且他们任意一个参加计算,或者自身相互运算都会转换成int类型进行计算存储。

public class AutoConvert{
	public static void main(String[] args){
	
		int num = 'a';
		double d1 = 80;

		System.out.println(num);
		System.out.println(d1);

		//自动转换细节
		//char->int->long->float->double
		//byte->short->int->long->float->double
		//多种数据类型的数据混合运算时,会转换成精度最大的数据类型进行计算
		int num1 = 10;
		//float sum = num1 + 1.1;错  1.1 默认会认为是Double类型
		//double sum = num1 + 1.1;
		float sum = num1 + 1.1F;
		float sum1 =num1 +  (float)1.1;
		System.out.println(sum1);

		//byte short不能和char自动转换,他们只要任意一个参与运算,结果都是直接转成int


		byte a1 = 10; //数值直接赋给byte 可以
		//byte = num1; //变量需要判断类型大小。 错误


		//char b1 = a1;  byte不能自动转换成char 
		//boolean 不参与转换

	}
}

强制转换

大容量类型变量赋值给小的,可能导致精度损失,谨慎使用

public class ForceConvert{
	public static void main(String[] args){
		//强制类型转换 大容量类型变量赋值给小的,可能导致精度损失 谨慎使用

		int n1 = (int)1.9;//(int)1.9 + 1.2  (int)只会直接对1.9生效,不是(1.9 + 1.2)
							//(int)(1.9 + 1.2) 正确
		System.out.println(n1); // 1

		int n2 = 2000;
		byte n3 = (byte)n2;
		System.out.println(n3); //-48


	}

}

注释

//单行注释
/*
	多行注释
	多行注释
*/

/**
	*@author Roderick 
	文档注释
*/
posted @ 2022-05-19 22:51  九天揽月丶  阅读(75)  评论(0)    收藏  举报