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

          数据类型转换

  • Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。
    1. 自动转换

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

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

  •  
    1. 强制转换

    将取值范围大的类型 强制转换成 取值范围小的类型 。

    注意,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。

    1. 强制类型转换使用必须谨慎,因为有可能发生数据溢出、精度损失。
    2. byte/short/char三种类型,都可以发生数学运算,例如加法。
    3. byte/short/char三种类型,在发生运算的时候,都会首先向上提升成为int类型,然后再运算。
    4. boolean类型不能发生类型转换。

    格式:小的数据类型 变量名 = (小的数据类型)数据值

    如:int a=(int)100L;

    1. ASCII编码表

    //char 和 int 相加

    char e=’a’;

    System.out.println(e+1);//98

     

    • 运算符
    1. 算术运算符

    +

    *

    /

    %

    ++

     

    注意 java整数相除,不会有余数 2/3=1

     

    特别注意 ++ –的用法

     

    使用格式:

    1. 写在一个变量的前面。例如: ++a –b
    2. 写在一个变量的后面。例如: x++ y–

     

    使用方式:

    1. 单独使用:独立成为一个语句步骤,不和其他任何操作混合。
    2. 混合使用:与其他操作一起混合,例如赋值语句、打印输出语句等等。

     

    使用区别【重点】:

    1. 在单独使用的时候,前++和后++没有任何区别。
    2. 在混合使用的时候,前++和后++存在【重大区别】。
    3. 如果是【前++】,那么变量【立刻马上+1】,然后拿着结果进行使用。(先加后用)
    4. 如果是【后++】,那么变量先使用本来之前的数据,【然后变量再+1】。(先用后加)

    注意:该加是一定会加的,只不过是先后时机不一样。

    以下代码好好理解:

    public static void main(String[] args)

    {

    int i=1;

    i++;     //2

    ++i; //3

    System.out.println(i++);   //先输出i=3,然后在加1,变成4

    System.out.println(++i);   //5 先加1 然后输出5

    }

    1. 赋值运算符,就是右边的值赋给左边

    =

    +=

    -=

    *=

    /=

    %=

     

    a+=5 就是a=a+5

    1. 比较运算符

    是两个数据之间进行比较,结果是true或者false

    ==

    <=

    >=

    !=

     

     

    1. 逻辑运算符

    &&

    ||

    !

    ^ 一样输出false 不一样 true

     

    1. 三元运算符

     

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

     

    三、 方法入门

    1. 什么是方法

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

     

    方法的定义:

     

    修饰符 返回值类型 方法名 (参数列表){

    方法体

    Return;

    }

     

    修饰符:目前固定写法 public static

    返回值类型: 目前固定写法 void 。

    方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。

    参数列表: 目前无参数。

    return:方法结束。因为返回值类型是void,方法大括号内的return可以不写。

     

    如:

    public static void say(){

    System.out.println(“我是人”);

    }

    2.方法的调用

    方法名();

     

    注意事项:

    1. 方法定义的前后顺序,无所谓。
    2. 方法的定义不能包含嵌套关系。(带有public static void的就叫做定义)
    3. 最后一行return;代表方法的结束,今天可写可不写。
    4. 方法定义之后,是不会主动自己运行的。如果希望执行方法,必须进行调用。

     

    四、拓展

    1. 复合赋值运算符,其中隐含了一个强制类型转换。

     

    1. 对于byte/short/char三者来说,只要赋值的右边不超过本类型的范围,那么编译器(javac)将会自动隐含地补上强制类型转换:(byte)(short)(char)。

    如果右侧的数值超过了左侧的范围,那么编译器将不会再做这种隐含强转,而会直接报错。

     

    public static void main(String[] args){

    short s = 1;

    s+=1;

    System.out.println(s);

    }

     

    1. 编译器的常量优化

    如果一个表达式完全由常量组成,那么在javac编译的时候,就会直接计算出结果,放在.class字节码文件中。

    而此时此刻刚刚编译通过,还没有运行程序呢。

     

    *.java –> javac –> *.class –> java –> 运行结果

    编译期    –> 运行期

    编译器的常量优化,发生在编译期,而不是运行期。

    只有常量才会有这种表达式优化;如果是变量就不会再优化了。

     

    public static void main(String[] args){

    byte b1=1;

    byte b2=2;

    byte b3=1 + 2;

    byte b4=b1 + b2;

    System.out.println(b3); //没问题

    System.out.println(b4); //编译失败,变量不会优化

    }

 

 

 

 

发表评论