您的位置:首页 > 其它

day02【数据类型转换、运算符、方法入门】

2020-06-06 05:24 246 查看

day02【数据类型转换、运算符、方法入门】

  • 强制转换
  • ASCII编码表
  • 运算符
  • 方法入门
  • 扩展知识点
  • 一、数据类型转换

    Java程序要求参与计算的数据的数据类型必须一致,如果数据类型不一致需要进行类型转换。

    自动转换

    自动转换:将取值范围小的类型自动提升为取值范围大的类型。
    比如:int类型与byte类型之间进行加法运算,结果是int类型。代码示例如下:

    public class AutomaticTransfer {
    public static void main(String[] args) {
    int intNumber = 1;
    byte byteNumber = 2;
    // byte number = intNumber + byteNumber;// 报错,结果是int类型,不能直接赋值为byte类型
    // int类型和byte类型运算,结果是int类型
    int number =intNumber + byteNumber;
    System.out.println(number);
    }
    }

    转换规则

    范围小的类型向范围大的类型提升,byte、short、char运算时直接提升为int。从左到右从小到大,具体如下:

    byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double

    强制转换

    强制类型转换:将取值范围大的类型强制转换成取值范围小的类型 。
    比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
    转换格式:数据类型 变量名 = (数据类型)被转数据值
    举例:

    // 浮点数默认是double类型,double类型数据强制转成int类型,直接去掉小数点
    int i = (int)1.5;

    注意!

    • 浮点转成整数,直接去掉小数,可能造成数据损失精度。
    • 取值范围大的类型强转取值范围小的类型,可能造成结果错误。因为大大类型的取值可能超出了小类型的最大值。举例代码如下:
    // 强制转换
    public class Coercion {
    public static void main(String[] args) {
    // shortNumber赋值为short类型最大值
    short shortNumber = 32767;
    // 运算后,结果本来为int类型的32777,超过了short类型的最大值,强制转换,砍掉2个字节后会出现不确定的结果
    shortNumber = (short)(shortNumber + 10);
    System.out.println(shortNumber);
    }
    }

    ASCII编码表

    编码表 :就是将人类的文字和一个十进制数进行对应起来组成一张表格。
    将所有的英文字母,数字,符号、汉字都和十进制进行了对应,因此产生了世界上第一张编码表ASCII( American Standard Code for Information Interchange 美国标准信息交换码)。
    常见的字符和数字对应关系如下:

    注意:在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升 为了int类型。char类型内存2个字节,int类型内存4个字节。

    将字符转化为对应数字,示例代码:

    public class CharacterToNumber {
    public static void main(String[] args) {
    // 输出ASCII码表中字符与数值的对应关系
    System.out.println("ASCII码表数值与字符的对应关系:");
    // familyNameSymbol表示姓氏字符,以下类推。numberSymbol:数字字符、letterSymbol:字母字符
    char familyNameSymbol = '刘';
    System.out.println("字符'刘'对应的数值为:"+(int)familyNameSymbol);
    char numberSymbol = '6';
    System.out.println("字符'6'对应的数值为:"+(int)numberSymbol);
    char letterSymbol = 'a';
    System.out.println("字符'a'对应的数值为:"+(int)letterSymbol);
    }
    }

    输入任意字符得到对应数字的代码:

    public class AnyCharacterToNumber {
    public static void main(String[] args) {
    // 在anyCharacterToNumber中输入任意字符,执行即可得到对应的数字
    anyCharacterToNumber('A');
    anyCharacterToNumber('z');
    }
    public static void anyCharacterToNumber(char symbol){
    System.out.println("字符'"+symbol+"'对应的数值为:"+(int)symbol);
    }
    }

    运算符

    算数运算符


    Java中,整数使用以上运算符,无论怎么计算,也不会得到小数。

    public class IntArithmetic {
    public static void main(String[] args) {
    int number = 1234;
    System.out.println(number/1000*1000);// 计算结果是1000
    }
    }

    ++ 运算,变量自己增长1。反之, – 运算,变量自己减少1,用法与 ++ 一致。
    变量在独立运算时, 前++ 和 后++ 没有区别。如:number++、++number。
    和其他变量放在一起混合运算时, 前++ 和 后++ 就产生了不同。

    • 变量 前++ :++number,变量number自己加1,将加1后的结果赋值给number2,也就是说number先计算。number和number2的结果都是2。
    • 变量 后++ :number++,变量number先把自己的值1,赋值给变量number2,此时变量number2的值就是1,变量number自己再加1。number的结果是2,number2的结果是1。
    public class AutoArithmetic {
    public static void main(String[] args) {
    // ++、--用法一致
    // 混合运算时,++在前,先自增1再把自增结果运算
    int number = 1;
    int number2 = ++number;
    System.out.println(number);// number=2
    System.out.println(number2);// number2=2
    
    // 混合运算时,++在后,先运算后自增1
    int number3 = 1;
    int number4 = number3++;
    System.out.println(number3);// number3=2
    System.out.println(number4);// number4=1
    }
    }

    +符号在字符串中的操作:+符号在遇到字符串的时候,表示连接、拼接的含义。“a”+"b"的结果是“ab”,连接含义。

    public class StringConnect {
    public static void main(String[] args) {
    System.out.println("5"+5+5);// 数值相加结果为15,但是这是字符串拼接结果为:555
    }
    }

    赋值运算符


    赋值运算符,就是将符号右边的值,赋给左边的变量。

    public class AssigningOperator {
    public static void main(String[] args) {
    int number = 5;
    number+=6;// 计算方式:number = number + 6;
    System.out.println(number);// 输入结果是11
    }
    }

    比较运算符


    比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值 true 或者 false 。

    public class ComparisonOperator {
    public static void main(String[] args) {
    System.out.println(1 == 1);// true
    System.out.println(1 > 1);// false
    System.out.println(1 < 1);// false
    System.out.println(1 >= 1);// true
    System.out.println(1 <= 1);// true
    System.out.println(1 != 1);// false
    }
    }

    逻辑运算符


    逻辑运算符,是用来连接两个布尔类型结果的运算符,运算结果都是布尔值 true 或者 false。

    public class LogicalOperator {
    public static void main(String[] args) {
    System.out.println(true && true);// true
    System.out.println(true && false);// false
    System.out.println(false && true);// false,右边不计算
    
    System.out.println(false || false);// false
    System.out.println(false || true);// true
    System.out.println(true || false);// true,右边不计算
    
    System.out.println(!false);//true
    }
    }

    三元运算符

    三元运算符格式:数据类型 变量名 = 布尔类型表达式?结果1:结果2
    三元运算符计算方式:

    • 布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
    • 布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
    public class TernaryOperator {
    public static void main(String[] args) {
    int number = (1 == 2 ? 100 :200);
    System.out.println(number);// 200
    
    int number2 = (3 <= 4 ? 500 :600);
    System.out.println(number2);// 500
    }
    }

    方法入门

    概述

    方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。
    当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。

    方法的定义

    定义格式:

    修饰符 返回值类型 方法名 (参数列表){
    代码。。。
    return ;
    }

    定义格式解释:

    • 修饰符: 目前固定写法 public static 。
    • 返回值类型: 目前固定写法 void ,其他返回值类型在后面的课程讲解。
    • 方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。
    • 参数列表: 目前无参数, 带有参数的方法在后面的课程讲解。
    • return:方法结束。因为返回值类型是void,方法大括号内的return可以不写。
      举例:
    public static void methodName(){
    System.out.println("这是一个方法");
    }

    方法的调用

    方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法。在 主方法中,直接写要调用的方法名字就可以调用了。

    public class CallingMethod {
    public static void main(String[] args) {
    // 调用定义的方法method
    method();
    }
    public static void method(){
    System.out.println("自己定义的方法,需要被main调用运行");
    }
    }

    调用练习

    将三元运算符代码抽取到自定义的方法中,并调用。

    public class UseMethod {
    public static void main(String[] args) {
    // 调用定义的方法operator
    operator();
    }
    
    // 定义方法,方法中定义三元运算符
    public static void operator() {
    int number = (1 == 2 ? 100 :200);
    System.out.println(number);// 200
    
    int number2 = (3 <= 4 ? 500 :600);
    System.out.println(number2);// 500
    }
    }

    注意事项

    • 方法必须定义在一个类里面
    • 方法不能定义在其他个方法的里面

    扩展知识点

    +=符号的扩展

    += 是一个运算符,只运算一次,并带有强制转换的特点, 也就是说 s += 1 就是 s = (数据类型)(s + 1)。
    但是, s=s+1进行两次运算,s+1的结果是int类型,再赋值就会出现类型不一样的报错。因为没有使用强制转换,所以与s += 1是不一样的。所以如下程序使用s += 1能通过,使用 s=s+1则不行。

    public class Extension {
    public static void main(String[] args) {
    short number = 1;
    number += 1;
    // number = number + 1;程序报错,此时运算结果是int类型,又没有进行强制转换
    System.out.println(number);// 结果为2
    }
    }

    再次强调,数值运算强制转换可能出现问题:1、小数被去掉,精度丢失。2、超过小类型的最大值的运算,导致结果错误。

    常量和变量的运算

    请分析下面的程序

    public class Extension {
    public static void main(String[] args) {
    byte number1 = 1;
    byte number2 = 2;
    byte number3 = 1 + 2;
    byte number4 = number1 + number2;
    System.out.println(number3);
    System.out.println(number4);
    }
    }

    分析: number3 = 1 + 2 , 1 和 2 是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了 1+2 的结果并没 有超过byte类型的取值范围,可以赋值给变量 number3 ,因此 number3=1 + 2 是正确的。
    反之, number4 = number1 + number2 , number1 和 number2 是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定number1+number2的结果是什 么,因此会将结果以int类型进行处理,int类型不能赋值给byte类型,因此编译失败。

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐