Java编程思想读书笔记--第三、四章笔记(操作符,流程控制)

Java编程思想读书笔记–第三、四章笔记(操作符,流程控制)

  • String和+操作符以及在输出语句中的转换
  • 对象引用的赋值
  • 随机数Random类
  • Equals方法入门
  • 短路原则
  • 字符串的打印和有趣的地方
  • 类型转换
  • 截尾和舍入
  • Java没有sizeof()
  • 逗号运算符

String和+操作符以及在输出语句中的转换

这里写图片描述


对象引用的赋值

这里写图片描述
看下面例子:

/**
 * 对象引用的赋值问题
 * 可以想象成两根线连着一个气球
 */
public class Code_01_QuoteAssignment {

    private static class Tank{
        public int level;
    }

    public static void main(String[] args) {
        Tank t1 = new Tank();
        Tank t2 = new Tank();

        t1.level = 9;
        t2.level = 47;

        System.out.println("t1 : " + t1.level );
        System.out.println("t2 : " + t2.level );
        System.out.println("-------------");

        t1 = t2;
        System.out.println("t1 : " + t1.level );
        System.out.println("t2 : " + t2.level );
        System.out.println("-------------");

        t1.level = 27;
        System.out.println("t1 : " + t1.level );
        System.out.println("t2 : " + t2.level );
        System.out.println("-------------");
    }
}

输出效果
这里写图片描述
这里写图片描述
下面的也是产生类似的问题:

public class Code_02_QuoteAssignment2 {

    private static class Letter{
        public char c;
    }

    public static void f(Letter letter){
        letter.c = 'z';
    }
    public static void main(String[] args) {
        Letter letter = new Letter();
        letter.c = 'a';

        System.out.println("1 : letter.c = " + letter.c);

        f(letter);

        System.out.println("2 : letter.c = " + letter.c);
    }
}

输出:

1 : letter.c = a
2 : letter.c = z

这里写图片描述
但是要注意下面的输出,如果一个引用又指向了别的,就没关系了:

        StringBuilder str1 = new StringBuilder("2");
        StringBuilder str2 = new StringBuilder("3");
        StringBuilder str3 = str1;

        str1.append("2");
        System.out.println(str3);

        str1 = str2; //牵了别的气球
        System.out.println(str1);
        System.out.println(str3);

输出

22
3
22

更多内容可以看下这篇博客


随机数Random类

这里写图片描述


Equals方法入门

public class Code_03_EqualsTest {
    private static class Value{
        public int i;
    }

    public static void main(String[] args) {
        Value v1 = new Value();
        Value v2 = new Value();

        v1.i = v2.i = 100;
        System.out.println(v1.equals(v2));//false
    }
}

这里写图片描述


短路原则

这里写图片描述
这个可以在判断数组越界的时候,把判断是否越界放在第一个条件。


/**
 * 测试短路原则
 */
public class Code_04_ShortCircuit {

    public static boolean test1(int val){
        System.out.println("test1");
        return val < 1;
    }

    public static boolean test2(int val){
        System.out.println("test2");
        return val < 2;
    }

    public static boolean test3(int val){
        System.out.println("test3");
        return val < 3;
    }

    public static void main(String[] args) {
        boolean bool = test1(0) && test2(2) && test3(2);
        System.out.println("hello! ");
    }
}

输出:

test1
test2
hello! 

字符串的打印和有趣的地方


/**
 * 字符串和输出要注意的地方
 */
public class Code_07_StringOperators {


    public static void main(String[] args) {
        int x = 0, y = 1,z = 2;

        System.out.println(" " + x + y + z);  //012
        System.out.println(x + y + z + " ");  //3

        System.out.println(" " + (x+y+z));  // 3

        System.out.println("" + x); //short than Integer.toString()
    }
}

输出:
这里写图片描述
这里写图片描述


类型转换

/**
 * 类型转换
 */
public class Casting {


    public static void main(String[] args) {

        int i = 10;
        long lng = (long)i; //不是必须的
        lng = i;   //从低到高 
        long lng2 = 100;

        //从高到低 是必须的
        i = (int) lng2;  //这个是必须的
    }
}

这里写图片描述


截尾和舍入

在执行窄化转换时,必须注意截尾和舍入的问题,例如,如果将一个浮点值转换成一个整形值,Java会如何处理呢?看下面的代码:

public class CastingNumbers {

    public static void main(String[] args) {
        double above = 0.7, below = 0.4;
        float fabove = 0.7f, fbelow = 0.4f;

        System.out.println("(int)above: " + (int)above);
        System.out.println("(int)below: " + (int)below);

        System.out.println("(int)fabove: " + (int)fabove);
        System.out.println("(int)fbelow: " + (int)fbelow);
    }

输出:

(int)above: 0
(int)below: 0
(int)fabove: 0
(int)fbelow: 0

根据输出可以得到答案是: 将float或者double转换成整形值时,总是对该数字执行截尾。要想得到舍入的结果,就需要使用java.lang.Math中的round方法。

public class Code_10_RoundingNumbers {

    public static void main(String[] args) {
        double above = 0.7, below = 0.4;
        float fabove = 0.7f, fbelow = 0.4f;

        System.out.println("Math.round(above): " + Math.round(above));
        System.out.println("Math.round(below): " + Math.round(below));
        System.out.println("Math.round(fabove): " + Math.round(fabove));
        System.out.println("Math.round(fbelow): " + Math.round(fbelow));
    }
}

输出(注意是四舍五入) :

Math.round(above): 1
Math.round(below): 0
Math.round(fabove): 1
Math.round(fbelow): 0

这里写图片描述
这里写图片描述
看下面图:
这里写图片描述


Java没有sizeof()

这里写图片描述


逗号运算符

这里写图片描述

猜你喜欢

转载自blog.csdn.net/zxzxzx0119/article/details/81713118
今日推荐