黑马程序员技术交流社区

标题: [成都校区]java变量的操作以及一些高级操作 [打印本页]

作者: 哈哈大圣    时间: 2018-11-15 09:19
标题: [成都校区]java变量的操作以及一些高级操作
本帖最后由 哈哈大圣 于 2018-11-15 09:33 编辑

---
问题,一个小球离地100米,现在做自由落体运动,第一次落地后,又弹跳了上次高度的一般,有开始做自由落体运动,如此反复,每次弹跳都是上次高度的一般,求第十次落地所经过的路程,第十次落地后弹跳的高度。

[Java] 纯文本查看 复制代码
public class JavaLearn.datastructure.datastructure.linkedList.bannerySearchTree.Main {

    public static void main(String[] args) {
        // 小球10次跳动问题
        double initialHeight = 100.00; //这个是初试的高度
        double currentHeight = initialHeight; // 记录当前周期的高度
        double sumOver = 0.0; // 记录经过的路径
        for (int i = 0;i < 10; i++){
            sumOver += currentHeight * 1.5;
            currentHeight /= 2.0;
        }
        sumOver -= currentHeight;
        System.out.println(sumOver); // 第十次弹跳的高度。
        System.out.println(currentHeight); // 第十次反弹后的高度。
    }
}


---

2. 数据类型的转换
数据类型不一样时,会发生数据类型转换,有两种形式:
隐式转换(自动类型转换):精度低的转换为精度高的(范围小的转换为范围大的)
显示类型转换(强制类型转换):手动转换

注意:谨慎使用强制类型转换(数据溢出,精度减小)
对于byte,short 类型,JVM进行了优化,右边是int类型且是常量类型且不超过左边的范围是可以进行转换的。如果右侧参与了运算就不会进行进行这种优化,如果是类似于 `byte a += 5` 这种情况,底层也进行了优化。`格式`:小类型 名 = (小类型) 大类型数据

JVM针对于:byte/short/char类型转换的优化,如下演示:
[Java] 纯文本查看 复制代码
byte a = 10; // 正确
a += 5; // 正确
a = a + 5; //错误
byte b = a + 5; // 错误

byte c = 6;
byte d = 7;
byte f = c + d; // 错误由于自动转换为int类型进行计算,

byte res = 5 + 6; // 正确,因为右侧全是常量,这种叫做常量优化机制



byte/short/char这三种类型都可以发生数学运算
都会被提升为int类型,然后进行运算,注意:这里的char运算会涉及到ASCII操作,C/C++强类型语言类似,却要与JavaScriptPython等弱语言区分开boolean类型不能发生数据类型转换


ASCII表该记住的一些东西
[Java] 纯文本查看 复制代码
48 '0'
65 'A'
97 'a'

数字和字符的对照关系表(编码表)
ASCII 码表:American Standard Code for Information Interchange;美国信息交换标准代码
Unicode码表:万国码
UTF-8码表:

[Java] 纯文本查看 复制代码
public class JavaLearn.ChangeStyle {

    public static void main(String[] args){
        // 强制类型转换,适用于高转低,大转小
        int num = (int) 123.456;

        int num2 = (int)6000000000L; // 数据溢出
        System.out.println(num2); //1705032704
        System.out.println('A' + 1); // 66  ASCII码操作

        byte num4 = 40;
        byte num5 = 50;
        // byte/short/char计算时会提升为int进行计算
        // 右侧的数值大小不能超过左侧的类型范围
        int result1 = (int)(num4 + num5);
        System.out.println(result1);

        char zifu3 = 'c';
        int znum = zifu3; // char --> int 从小到大
        System.out.println(znum);
    }
}



---

3. 运算符
运算符的优先级:括号 . ! (||) (|) 比较运算符 && || 赋值运算符 ==


一、基础运算符

注意 System.out.println(5 / 2);的结果为2,因为默认为int类型,值也是int类型


加号的三种用法:

二、自增于自减
自增 ++  分为前加加(先加后用),后加加(先用后加)
自减 --  (与++一样的效果)


如下演示 假如 i = 10;
i++ ++i a = i ++ a = ++i System.out.print(i++)
11 11 a = 10 a = 11 10

三、赋值运算符

四、比较运算符

五、逻辑运算符

"&&" "||" 具有短路效果,如果左边的判断已经确定了结果,这是右边的判断不会执行,这是底层优化



六、位运算符

七、三元运算符

例如


[Java] 纯文本查看 复制代码
int a = 10, b = 20; c = 30;

int max = a > b ? (a > c ? a : b) : (b > c ? b : c);










欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2