JAVA基础——变量(韩顺平P35-P62)

目录

一、变量介绍

二、+号的使用

三、数据类型(重点)

四、JAVA API

五、编码

六、数据类型转换


一、变量介绍

  • 变量是程序的基本组成单位。
  • 变量有三个基本要素:类型+名称+值
    • 比如:int a=1;(这时会在计算机的内存里分配一个空间,里面放了一个值1)(不允许在一个作用域(比如一个方法里)里面定义两个一样名字的变量
  • 变量相当于内存中一个数据存储空间的表示(可以把变量当作房间的门牌号,可以通过变量访问到变量值)。
  • 变量使用的基本步骤:声明变量+赋值,使用。
  • 不同的变量、类型不同,占用的空间大小不同

二、+号的使用

  • 当左右两边都是数字类型的时候,则作加法运算。
  • 当左右两边有一方为字符串的时候,则作拼接运算。
public class Example {
    public static void main(String[] args){
        System.out.println(100+98);  // 加法运算,输出198
        System.out.println("100"+98);  // 拼接运算,输出10098
        System.out.println("hello"+100+98);  // 拼接运算,输出hello10098
    }
}

三、数据类型(重点)

  • 每一种数据都定义了明确的数据类型,在内存中分配了不同大小的存储空间(字节)。
  • bit是计算机中的最小存储单位,1个字节=8个bit。(所以如果是short a=3,那就有2个字节,共16个bit,前14位全为0,后两位是1 1,因为是二进制3),
  • 8种基本数据类型:(String不算基本数据类型,算是类)

  • 整数类型:byte(1个字节,-128到127);short(2个字节,-2^{15}2^{15}-1);int(4个字节,-2^{31}2^{31}-1);long(8个字节,-2^{63}2^{63}-1)。(默认为int型,如果要声明长整型,后面要加l或L).
public class Example {
    public static void main(String[] args){
        int a = 3L; // 会报错,因为3L是long型,a是int型,大空间赋给小空间会报错。
        float num1 = 1.1;  // 因为默认是double型,所以把1.1这个8字节的赋给float4个字节的会报错。
        float num2 = 1.1F; // 需要把1.1改为float类型的。
        double num3 = 1.1; // 对的
        double num4 = 1.1F; //可以的,把小空间的赋予给大空间,是可以存下的
    }
}
  • 浮点(小数类型):浮点数=符号位+指数位+尾数位。float(单精度,4个字节,-3.403E38~3.403E38);double(8个字节,-1.798E308~1.798E308)。(位数部分可能丢失,所以浮点型总是有一个精度的问题)。(默认为double型,如果要声明float型,数字后面要加f或F)。
    • 有一个陷阱:当我们对运算结果是小数的进行比较时,要小心。(判断是否相等最好用差值的绝对值是否在一个精度范围内来做)。
    • 因为计算机在计算除法的时候不知道能不能除尽,所以要预留很多位空间。
public class Example {
    public static void main(String[] args){
        double num1 = 2.7;
        double num2 = 8.1 / 3;
        System.out.println(num1); //输出2.7
        System.out.println(num2); //输出接近2.7的一个小数
        if(Math.abs(num1 - num2) < 0.000001){
            System.out.println("可以认为num1和num2相等了")
        }
    }
}
  • 字符型:可以表示单个字符,字符类型是char(两个字节)。多个字符用字符串String表示(以后会讲)
    • 注意:单引号表示字符,双引号表示字符串。char类型的本质是整数型(unicode编码)所以其实char类型是可以进行运算的。
    • 字符类型存储的时候,实际上存储的是字符对应的编码的二进制。(比如存储a,对应编码是97,实际存的是110 0001)
public class Example {
    public static void main(String[] args){
        char c1 = 'a';
        char c2 = '\t';
        char c3 = '你';  //如果print(int(c3))会输出“你”对应的unicode码
        char c4 = 97; //会输出a。字符类型可以直接存放一个数字.a的编码是97
        System.out.println('a'+10); //会输出97+10=107

        char c5 = 'b'+ 1; 
        System.out.println(int(c5)); //会输出98+1=99
        System.out.println(c5); //会输出99对应的字符(对应ASCII编码表),输出c
    }
}
  • 布尔型:主要用于逻辑运算,一般用于程序流程控制。在JAVA种不能用0或非0的整数代表false和true,c语言就可以。(只能用true/false)
public class Example {
    public static void main(String[] args){
        boolean isPass = true; // 考试是否通过
        if(isPass == true){
            System.out.println("考试通过,恭喜");
        } else {
            System.out.println("考试未通过,下次努力");
        }
    }
}

四、JAVA API

比如上面用到的Math.abs这个方法。这些方法都封存在JAVA API里面,有很多包,每个包下面包含接口、很多类、异常。类里面就有具体的方法及其使用方法。

五、编码

  • ASCII编码表:用一个字节表示一个字符,可以表示128个字符。(实际上最多可以表示256个字符,因为一个字节有8个bit,2的8次方是256)
  • unicode编码:使用两个字节表示一个字符。(比如汉字,256个字符都不够用)(比如abc你一共占用6个字节)(而且兼容ascii表,比如a都用97表示)
  • utf-8:字母用1个字节表示,汉字用3个字节表示。(更加灵活,节约空间)(可以认为是对unicode的改进)
  • gbk:字母用1个字节,汉字用2个字节。(表示的汉字要少一点)
  • gb2312:用的比较少(<gbk)
  • big5码:繁体中文,台湾香港用的多。

六、数据类型转换

  • 自动类型转换:精度小的类型可自动转换位精度大的数据类型
    • 有多种类型混合运算的时候,系统会统一全部转换为容量最大的那种数据类型,再计算。
    • byte/short 不能和char互相转换。(这三个运算的时候精度会自动提升为int,单独或混合都会自动转换为int
    • 布尔类型不参与类型的自动转换。

public class Example {
    public static void main(String[] args){
        int n1 = 10;
        float d1 = n1 + 1.1; //会报错,右边是double,不能赋给float
        int n2 = 1.1; //会报错,double不能转换成int
        //(byet/short)不能和char互相转换
        byte b1 = 10; // 是对的,会先判断10是否在byte的范围内,如果在就是对的,
        // 编译器是先判断范围(如果b1=1000就会报错),再判断类型(所以不能简单认为10默认是int型),如果写b1=n1就会报错
        char b2 = b1; //会报错,byte不能自动转换成char

        short b3 = 1;
        short b4 = b1 + b3; // 会报错,右边精度自动提升为int
        byte b4 = b1 + b1; // 也会报错,byte和byte运算也会转为int
    }
}
  • 强制类型转换:其实是自动转换的逆过程(将容量大的类型转换为容量小的数据类型),可能会造成精度降低或溢出。
    • 强转符号只针对于最近的操作数有效,往往使用小括号提升优先级。
  • 基本数据类型和String类型的转换:只用给基本数据类型加上 " " 就行。
  • String类型转换为基本数据类型:每个基本类型的包装类都有一个parseXX的方法。调用就行(比如Integer.parseint()、Double.parseDouble()、Boolean.parseBoolean("true")……)。但是字符串转成字符,就只能说是取出其中的一个字符。
    • 可以把“123”转化成整数,但是要是想把"hello"转化成整数,会抛出异常,程序会终止。
public class Example {
    public static void main(String[] args){
        int n1 = (int)1.9;   //会输出1, 这其实造成的损失很大,精度损失
        int n2 = 2000;
        byte b1 = (byte)n2;  //会输出-48,这就是数据溢出
        String s1 = n1 + ""; //这样就转换成字符串了
        // 用Integer种的parseInt方法,将别的类型强制转换为int
        int num1 = Integer.parseInt(s1); // 可以得到字符串d1对应的int类型
    }
}

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值