Java 操作符

简介: 版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/50319127 重新再来看(总感觉第一次看)《java编程思想》的话,还是有很多的收获,比如这篇Java 操作符。
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/50319127

重新再来看(总感觉第一次看)《java编程思想》的话,还是有很多的收获,比如这篇Java 操作符。

一、算术操作符

①、Random

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            Random r = new Random(2008);
            System.out.println(r.nextInt(3)+ "-----------");
        }
    }

为什么会输出1,确实让人百感交集,至少到目前为止,我还是没有弄清楚为什么会等于1,不是等于2,或者是0。

【小测试】Random的使用问题这里有个话题可以参考,有人说的让人很懂的样子,但是我还是没懂,但明白了以下:

  1. new Random()在没有传递指定种子的时候,默认种子为当前时间(毫微秒为单位)。
  2. 设置种子后,就意味着r对象有着固定的形态,其第一次的next是固定的,第二次的next也是固定的,我本来以为有什么规律可以发现,但没有找到。

当前时间(毫微秒)作为种子时,也就意味着生成的随机数将会尽可能的不同

    public Random() { this(++seedUniquifier + System.nanoTime()); }
    private static volatile long seedUniquifier = 8682522807148012L;

②、魔幻数字47

本来我以为47是个神奇的数字,但其意义和我所想的截然相反,就是指单纯的下面的意思

虽然程式作者写的时候自己能了解数值的意义,但对其他程式员而言,甚至制作者本人经过一段时间后,会难以了解这个数值的用途,只能苦笑讽刺“这个数值的意义虽然不懂,不过至少程式会动,真是个魔术般的数字”而得名。

二、自动递增和递减

事到如今,我依然憎恨自动递增和递减,我觉得这个太魔幻,尤其是前缀和后缀还不一样。我是极不情愿理解这样的含义,但这一次,我好像“懂”了。

        int i=0;
        System.out.println(i++);
        System.out.println(i);
        System.out.println(++i);
        System.out.println(i);
        System.out.println(i--);
        System.out.println(i);
        System.out.println(--i);
        System.out.println(i);

第一次输出0,第二次1,第三次2,第四次2、、、

我从情感上讨厌这样的写法。

三、关系操作符

①、==

不过对于==操作符来说,如果是要比较基本类型,ok,如果是基本类型的装箱混比,那么转成基本类型再==,就不容易出现逻辑上错误。

        int i = 1;
        Integer j = 1;

        Integer k = new Integer(1);
        Integer k1 = new Integer(1);

        System.out.println(i == j);
        System.out.println(i == k);
        System.out.println(j == k);
        System.out.println(k1 == k);

不关乎答案如何,我觉得这种比较真心受够了,真让人久久不能释怀。

②、短路

    static boolean getB() {
        Random r = new Random();
        if (r.nextInt(5) < 4) {
            return false;
        }
        return true;
    }

    static boolean getA() {
        Random r = new Random();
        if (r.nextInt(5) < 2) {
            return false;
        }
        return true;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {

            boolean c = getA() && getB();

            System.out.println(c);
        }

    }

假如说存在以上这样的一个程序,从概率上来讲,把getA() && getB()的形式换成getB() && getA()更能节省时间。

为什么会这样,因为后一种形式在几率上更容易形成短路,也就是说getB()形成false的情况更多,这个时候getA()执行的机会就会少。

四、截尾和舍入

double d = 10.99;
        float a = (float)d;
        System.out.println(a);
        int b = (int) a;
        int f = Math.round(a);

        System.out.println(b);
        System.out.println(f);

向下转型的时候会丢弃精度。

王二语录

笑对现实的无奈,不能后退的时候,不再傍徨的时候,永远向前 路一直都在──陈奕迅《路一直都在》
本文出自:【qing_gee的博客

相关文章
|
12天前
|
存储 Java 编译器
Java基础教程(4)-Java中的操作符
【4月更文挑战第4天】Java中的String是常用类,字符串是不可变对象,用双引号表示。String对象在编译期长度受限于65535,运行期不超过Int范围。字符串方法如length()、substring()、replace()、equals()等提供了多种操作。可变字符串可使用StringBuffer或StringBuilder。String对象通过字符串池优化内存,池中已有相同内容字符串则返回其引用。
|
2月前
|
存储 设计模式 缓存
Java instanceof操作符:类型检查的必备工具
Java instanceof操作符:类型检查的必备工具
37 0
|
8月前
|
存储 Java 程序员
重温经典《Thinking in java》第四版之第三章 操作符(二十一)
重温经典《Thinking in java》第四版之第三章 操作符(二十一)
34 0
|
8月前
|
安全 Java 程序员
重温经典《Thinking in java》第四版之第三章 操作符(二十)
重温经典《Thinking in java》第四版之第三章 操作符(二十)
33 0
|
8月前
|
存储 人工智能 算法
重温经典《Thinking in java》第四版之第三章 操作符(十九)
重温经典《Thinking in java》第四版之第三章 操作符(十九)
50 0
|
8月前
|
Java
重温经典《Thinking in java》第四版之第三章 操作符(十八)
重温经典《Thinking in java》第四版之第三章 操作符(十八)
39 0
|
8月前
|
Java
重温经典《Thinking in java》第四版之第三章 操作符(十七)
重温经典《Thinking in java》第四版之第三章 操作符(十七)
36 0
|
8月前
|
Java
重温经典《Thinking in java》第四版之第三章 操作符(十六)
重温经典《Thinking in java》第四版之第三章 操作符(十六)
29 0
|
8月前
|
Java
重温经典《Thinking in java》第四版之第三章 操作符(十五)
重温经典《Thinking in java》第四版之第三章 操作符(十五)
32 0
|
8月前
|
算法 Java C语言
重温经典《Thinking in java》第四版之第三章 操作符(十四)
重温经典《Thinking in java》第四版之第三章 操作符(十四)
26 0