java变量

130 阅读5分钟

这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战 | 创作学习持续成长,夺宝闯关赢大奖 - 掘金 (juejin.cn)

(二)变量

1.变量的基本概念

变量的概念、结构及作用

  • 概念:内存中的一个存储区域,该区域中的数据可以在同一类型范围内不断变化,变量是程序中最基本的存储单元
  • 结构:包括变量类型、变量名和存储的值
  • 作用:用于在内存中存储数据

使用变量注意

  • Java中的每个变量必须先声明后使用
  • 使用变量名来访问这个区域内的数据
  • 变量的作用域只在其定义所在的一对{}内
  • 变量只有在其作用域内才有效
  • 同一个作用域内不能定义同名的变量

2.变量的分类

按数据类型

image.png

按声明的位置的不同

  • 在方法体外,类体内声明的变量称为成员变量;
  • 在方法体内部声明的变量称为局部变量;

image.png

(局部变量除形参外,需显式初始化)

3.变量类型

(1)整数类型

byte,short,int,long

image.png

// 1.整型:byte(1字节=8bit,-128~127)\short(2字节)\int(4字节)\long(8字节)
    
    byte b1=12;
    byte b2=-128;
    //b2 = 128;//编译失败   
    System.out.println(b1);
    System.out.println(b2);
​
    //声明long类型变量,必须以“l”或“L”结尾
    //定义整型变量通常用int型
​
    short s1=128;
    int i1=1234;
    long l1=34111233;
    System.out.println("l1");

(2)浮点类型

float,double

image.png

//2.浮点型:float(4字节),double(8字节)
    double d1=123.3;
    System.out.println(d1+1);
​
    float f1=12.3f;
    //定义float类型变量时,变量要以“f”或“F”结尾
    System.out.println(f1);
​
    //通常定义浮点型变量时使用double

(3)字符类型

char

  • char型表示通常意义上的“字符”(2字节)
  • char型还可表示转义字符
  • char类型是可以进行运算的。因为它都对应有Unicode码

image.png

常见的编码类型:ASCLL\Unicode\UTF-8

//3.字符型:char(1字符=2字节)
    //声明字符型变量通常使用一对‘’,内部只能写一个字符
    char c1='a';
    String hhh1="abc";
    System.out.println(c1);
    System.out.println(hhh1);
    
    char c2='1';
    char c3='中';
    char c4='*';
    System.out.println(c2);
    System.out.println(c3);
    System.out.println(c4);
​
​
    //char表示方式:1)声明一个字符,2)转义字符(\n,\t等),3)直接使用Unicode值来表示字符型常量
    char c5='\t';
    System.out.print("hello"+c5);
    System.out.println("world");
​
    char c6='\u0043';//Unicode编码集
    System.out.println(c6);

(4)布尔类型

boolean:只允许取true、false

//4.布尔型:boolean
    //只能取两个值中的一个,true,false
    //通常在条件判断或循环结构中使用
    boolean bb1=true;
    System.out.println(bb1);
​
    boolean isMarried = true;
    if(isMarried){
        System.out.println("你就不能参加单身派对了\n123");//转义字符用一个反斜线\
    }else{
        System.out.println("你可以参加单身派对");
    }

4.基本数据类型转换

这里讨论除布尔外的其中基本数据类型的运算

(1)自动类型转换

  • byte-->short-->int-->long-->float-->double 特别的:byte,short,char三者做运算时全部提升为int short与char做运算提升为int byte与char做运算提升为int

  • 当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型 此时的容量大小指的是表示数的范围的大小,比如float的容量要大于long的容量

    class VariableTest2{
        public static void main(String[] args){
    ​
            byte b1 = 2;
            int i1 = 129;
    ​
            //byte b2 = b1 + i1;//编译不通过,从int转换到byte可能有损失
            int i2 = b1 + i1;
            long l1 = b1 + i1;
            System.out.println(i2);
            System.out.println(l1);
    ​
            float f1 = b1 + i1;
            System.out.println(f1);
    ​
            double d1 = b1 + i1;
            System.out.println(d1);
    ​
            short s1 = 123;
            double d2 = s1;
    ​
            System.out.println(d2);
    ​
    ​
            //************特别的******************
    ​
            char c1 = 'a';//97
            int i3 = 10;
            int i4 = c1 + i3;
    ​
            System.out.println(i4);
    ​
            short s2 = 10;
            int s3 = c1 + s2;
    ​
            System.out.println(s3);
    ​
            byte b2 =1;
            int s4 = c1 +b2;
    ​
            System.out.println(s4);
            //********************************
        }
    }
    

(2)强制类型转换

  • 自动类型提升的逆运算

  • 需要使用强转符()

  • 强制类型转换可能导致精度损失

  • 字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可 以实现把字符串转换成基本类型。 如: String a = “43”; int i = Integer.parseInt(a);

    class VariableTest3{
        public static void main(String[] args){
    ​
        double d1 = 12.9;
        int i1 = (int)d1;//double强制转为int,不同于四舍五入,截断操作损失精度
        System.out.println(i1);
    ​
    ​
        long l1 = 123;
        short s2 = (short)l1;//没有精度损失
    ​
        //精度损失举例2
        int i2 = 128;
        byte b = (byte)i2;
        System.out.println(b);//-128
        }
    }
    

(3)默认情况

  • 整型默认为int
  • 浮点型默认为double
class VariableTest4{
    public static void main(String[] args){
    //1.编码情况1
    long l = 123213;//整型默认为int
    
    System.out.println(l);
​
    long l1 = 213333333333333333l;//不加l被认定为int
    System.out.println(l1);
​
    float f1 = 12.3f;//浮点型默认为double
    System.out.println(f1);
​
​
    //2.编码情况2
    byte b = 12;
    //byte b1 = b + 1;//整型常量默认为int,浮点型常量默认为double
    //float f1 = b + 12.3;//编译失败
    }
}

5.字符串类型String

  • String属于引用数据类型,翻译为 字符串
  • 声明String类型变量时,使用一对“”
  • String可以和8种基本数据类型变量做运算,且运算只能是连接运算 “+”
  • 运算结果仍然是String类型
class StringTest{
    public static void main(String[] args){
        String s1 = "Hello World";
        System.out.println(s1);
​
        String s2 = "a";
        String s3 = "";//String类型可以为空
​
        //char c = '';//编译错误:char类型不能为空,有且只有一个
​
        System.out.println(s3);
        //*********************
        int num = 1001;
        String numStr = "学号:";
        String info = numStr + num;//连接运算
        System.out.println(info);
        boolean b1 = true;
        String info1 = info + b1;
        System.out.println(info1);
​
​
        //练习一
        char c = 'a';//a:97  A:65
        int num1 = 10;
        String str = "hello";
        System.out.println(c + num1 + str);//107hello
        System.out.println(c + str + num1);//ahello10
        System.out.println(c + (num1 + str));//a10hello
        System.out.println((c + num1) + str);//107hello
        System.out.println(str + num1 + c);//hello10a
​
        //练习二
        //* *
        char c1 = '*';
        System.out.println(c1+'\t'+c1);
        System.out.println('*' + '\t' + '*');//char对应ascll自动转换为int
        System.out.println('*' + "\t" + '*');//“\t”表示String
        System.out.println("*" + '\t' + '*');
        System.out.println('*' + ('\t' + '*'));
        
​
    }
}