Chapter02_数据类型转换、运算符、方法入门

第一节 数据类型转换

java程序中要求参与的计算数据,必须要保证数据类型的一致性,如果数据类型不一样将发生类型的转换。

1.1自动转换(是Java自动执行)

  1. 将取值范围小的自动提升为取值范围大的。
public static void main(String[] args){
    byte b = 2;
    int i = 1;
    //byte x = b + i;
    //int类型和byte类型运算,结果是int类型
    int j = b+i;
    System.out.println(j)
}
  • 转换原理图解

  1. byte类型内存占有1个字节,int类型内存占4个字节,byte类型在和int类型运算时,自动补充3个字节,因此计算结果还是int类型的。
  2. 同样道理,当一个int类型变量和一个double变量运算时,int类型会自动提升为double类型进行运算。
public static void main(String[] args){
    int i = 1;
    double d = 3.6;
    
    double e = i +d;
    System.out.println(e);
}
  • 转换规则

范围小的类型向范围大的类型提升,byte、short、char运算时会自动提升为int类型

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

1.2强制转换(是需要我们手动的)

  1. 强制类型转换:就是将范围大的类型自动转换为取值范围小的类型。

  2. 转换格式

    数据类型 变量名 = (数据类型)被转数据值;

    将1.5赋值给int类型,代码修改为:

    //double类型转换为int类型,直接去掉小数点
    int i = (int)1.5;
    

同样,当short类型与1相加的时候

public static void main(String[] args){
    //short类型变量,内存中2个字节
    short s = 1;
  /*
  出现编译失败
  s和1做运算,1是int类型,s会被提升为int类型
  s + 1后结果是int类型,将结果再赋值给s时会发生错误,因为s是short类型
  short内存2个字节,int类型4个字节,必须将int强制转成short才能完成。
  */
	s = s +1;//编译失败
    s = (short)(s+1);//编译成功
}

强烈注意

  • 浮点数转成整数,直接取消小数点,可能造成数据损失精度。

  • int强制转成short砍掉两个字节,可能造成数据丢失。

    //定义s为short范围内最大值
    short s=32767;
    s = (short)(s+10);
    

1.3ASCLL编码表

public static void main(String[] args){
    //字符类型变
    char c = 'a';
    int i = 1;
    //字符型类型和int类型计算
    System.out.println(c+i);//输出结果98
}

编码变:就是讲人类的文字和一个十进制数进行对应起来组成一张表格。

人们规定:

字符 数值
0 48
9 57
A 65
Z 90
a 97
z 122

第二节 运算符

2.1算术运算符

算数运算符包括:
+ 加法运算,字符串连接运算
- 减法运算
* 乘法运算
/ 除法运算
% 取模运算,两个数字相除取余数
++、-- 自增自减运算
  • ++运算,变量自己增长1.--运算,变量自己减少1,用法一致。(以加法为例)

    • 独立运算:

      • 变量在运算时,前++和后++没有区别。
    • 混合运算:

      • 和其他变量放在一起。前++和后++就不同了。

      • 变量前++:变量a自己加1,将加1后的结果赋值给b。

        public static void mian(String[] args){
            int a = 1;
            int b = ++a;
            System.out.println(a);//结果是2
            System.out.println(b);//结果为2
        }
        
      • 变量后++:变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a的值再自增加1,a的值就是2.

        public static void mian(String[] args){
            int a = 1;
            int b = a++;
            System.out.println(a);//结果是2
            System.out.println(b);//结果是1
        }
        
  • +符号在字符串中的操作:

    • +符号在遇到字符串的时候,表示连接、拼接的含义。

    • "a"+"b"的结果就是ab,连接的含义

      public static void mian(String[] args){
          System.out.prinntln("6+9="+6+9);//输出的6+9=69
      }
      

2.2赋值运算符

赋值运算符包括:
= 等于号
+= 加等于
-= 减等于
*= 成等于
/= 除等于
%= 取模等
  • 赋值运算符,就是讲符号右边的值,赋值给左边的变量。

    public static void main(String[] args){
        int i = 6;
    	i+=6;//计算方式i = i+6;
        System.out.println(i);结果是12
    }
    
    

2.3比较运算符

比较运算符包括:
== 比较符号两边数据是否相等,相等结果为true。
< 比较符号左边数据是否小于右边数据,如果小于为true。
> 比较符号左边数据是否大于右边数据,如果大于为true。
<= 比较符号左边数据是否小于等于右边数据,如果小于等于为true。
>= 比较符号左边数据是否大于等于右边数据,如果大于等于为true。
!= 比较符号左边数据是否不等于于右边数据,如果不等于于为true。
  • 比较运算符是两个数据之间进行比较运算,运算结果都是布尔值true或者false。

    public static void main(String[] args){
        System.out.println(1==1);//结果为true
        System.out.println(1<2);//结果为true
        System.out.println(6>9);//结果为false
        System.out.println(2>=1);//结果为true
        System.out.println(3<=1);//结果为false
        System.out.println(3!=1);//结果为true
    }
    

2.4逻辑运算符

  • 逻辑运算符使用来连接两个布尔型的结果的运算符,运算结果是布尔值true或者false
逻辑运算符包括:
& 与 无论左边是否为true或者false都判断右边。 false&true 结果为false
| 或 无论左边是否为true或者false都判断右边。 false&true 结果为true
^ 非 相同为真,不同为假。
&& 短路与 1.两边都是true,结果为true 2.一边为false,结果为false 短路特点:符号左边为false,右边不再算
|| 短路或 1.两个边都为false,结果为false。 2.一边为true,结果为true 短路特点:左边为true,右边不在算
! 取反 1.!true的结果为false。 2.!false的结果为true
  • 位运算符:&、|、^、~、<<、>>、>>>(0,1)
    • &:有0则0
    • |:有1则1
    • ^:相同为0,不同为1(涉及二进制)
    • ~:按位取反(取反码)
    • <<:左移位相当于乘以2^移位数(除去最高位,右边补0)
    • >>:右移位相当于除以2^移位数(除去后两位,最高位是0补0,是1补1)
    • >>>:无符号右移位(除去后两位,左边补0)
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(!true);//false
}
}

2.5三元运算符

  • 格式:数据类型 变量名 = 布尔类型表达式?结果1:结果2

  • 计算方式:

    • 布尔类型表达式的结果为true,三元运算符整体结果为结果1,赋值给变量。
    • 布尔类型表达式结果为false,三元运算符整体的结果为结果2,赋值给变量。
    public static void main(String[] args){
        int i = (6==9?66:99);
        System.out,println(i);//结果为99
        int j = (2<=9?100:200);
        System.out.println(j);//结果为100
    }
    

第三章 方法的入门

3.1概述

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

3.2方法的定义

方法写之前首先考虑三要素:

  1. 返回值类型
  2. 方法名称
  3. 参数列表
  • 定义格式:

    修饰符 返回值类型 方法名(参数列表){
        方法体
        return ;
    }
    
  • 定义格式解释:

    • 修饰符:目前固定的写法 public static
    • 返回值类型:也就是方法最终产生的数据结果是什么类型。
    • 方法名称:方法的名字,规则和变量一样,小驼峰。
    • 参数类型:进入方法的数据是什么类型。
    • 参数名称:进入方法的数据对应的变量名称
    • PS:如果参数有多个,使用逗号进行分隔。
    • 方法体:方法需要做的事,若干行代码
    • return:两个作用。第一停止当前方法,第二将后面的返回值还给调用处
    • 返回值:也就是方法执行后最终产生的数据结果
  • 注意:return后面的"返回值”,必须和方法名称前面的“返回值类型”,保持对应。

  • 举例:

    public static void methodName(){
        System.out.println("这是一个方法");
    }
    

3.3方法的三种调用格式

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

  1. 单独调用:方法名称(参数);
  2. 打印调用:System.out.println(方法名称(参数));
  3. 赋值调用:数据类型 变量名称 = 方法名称(参数);
public static void mian(String[] args){
    //单独调用
    sum(1,2);
    //打印调用
    System.out.println(sum(3,6));
    //赋值调用
    int number = sum(19,3);
    System.out.println(number);
}
//方法
public void int sum(int a,int b){
    int result = a+b;
    return result;
}

3.4注意事项

  • 方法定义的 注意事项:
    • 方法必须定义在一个类中,方法外
    • 方法不能定义在另一个方法的里面。

3.5扩展知识点

  1. +=符号扩展

    下面程序有问题吗?

    public static void main(String[] args){
        short s = 1;
        s +=1;
        System.out.println(s);
    }
    

    分析:s +=1;逻辑上看作是s = s+1;计算的结果被提升为int类型,在向short类型赋值时发生错误,因为不能将取值范围大的类型赋值到取值范围小的类型。但是,s=s+1进行两次运算,+=是一个运算符,只运算一次,并带有强制转换的特点,也就是说s+=1;就是s=(short)(s+1);因此程序没有问题编译通过,运行结果为2.

    1. 常量和变量的运算

      public static void main(String[] args){
          byte b1 = 1;
          byte b2 = 2;
          byte b3 = 1+2;
          byte b4 = b3+b2;
          System.out.println(b3);
          System.out.println(b4);
      }
      

分析:b3 = 1+2,1和2是常量,为固定不变的数据,在编译时(编译器javac),已经确定了1+2结果并没有超过byte类型的取值范围,可以赋值给变量b3,因此b3=1+2是正确的。

反之,b4 = b2+b3,b2和b3是变量,变量的值是可能发生变化的,在编译的时候,javac不确定b2+b3的结果是什么,因此会将结果以int类型处理,所以int类型不能赋值给byte类型,因此编译失败。(发生了自动转换,在计算的时候byte和short会自动转换为int类型)

posted @ 2020-02-02 19:24  _Anke  阅读(249)  评论(0编辑  收藏  举报