Java 教程 在线

1327Java Character 类

\r: return 到当前行的最左边。

\n: newline 向下移动一行,并不移动左右。

Linux中\n表示:回车+换行;

Windows中\r\n表示:回车+换行。

Mac中\r表示:回车+换行。

历史:

回车"(Carriage Return)和"换行"(Line Feed)这两个概念的来历和区别。 在计算机还没有出现之 前,有一种叫做电传打字机(Teletype Model 33,linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正 好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车(return)",告诉打字机把打印头定位在左边界;另一个叫做"换行(newline)",告诉打字机把纸向下移一行。这就是"换行"和"回车"的来历,从它们的英语名字上也可以看出一二。

1326Java Number & Math 类

Math.floor 是向下取整。

Math.ceil 是向上取整。

Math.round 是四舍五入取整 但是需要注意的是:

  • 1、参数的小数点后第一位小于 5,运算结果为参数整数部分。
  • 2、参数的小数点后第一位大于 5,运算结果为参数整数部分绝对值 +1,符号(即正负)不变。
  • 3、参数的小数点后第一位等于 5,正数运算结果为整数部分 +1,负数运算结果为整数部分。

1325Java Number & Math 类

Java 中 int 和 Integer 的区别

1. int 是基本数据类型,int 变量存储的是数值。Integer 是引用类型,实际是一个对象,Integer 存储的是引用对象的地址。

2.

Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false

因为 new 生成的是两个对象,其内存地址不同。

3.

int 和 Integer 所占内存比较:

Integer 对象会占用更多的内存。Integer 是一个对象,需要存储对象的元数据。但是 int 是一个原始类型的数据,所以占用的空间更少。

4. 非 new 生成的 Integer 变量与 new Integer() 生成的变量比较,结果为 false。

/**
 * 比较非new生成的Integer变量与new生成的Integer变量
 */
public class Test {
    public static void main(String[] args) {
        Integer i= new Integer(200);
        Integer j = 200;
        System.out.print(i == j);
        //输出:false
    }
}

因为非 new 生成的 Integer 变量指向的是 java 常量池中的对象,而 new Integer() 生成的变量指向堆中新建的对象,两者在内存中的地址不同。所以输出为 false。

5. 两个非 new 生成的 Integer 对象进行比较,如果两个变量的值在区间 [-128,127] 之间,比较结果为 true;否则,结果为 false。

/**
 * 比较两个非new生成的Integer变量
 */
public class Test {
    public static void main(String[] args) {
        Integer i1 = 127;
        Integer ji = 127;
        System.out.println(i1 == ji);//输出:true
        Integer i2 = 128;
        Integer j2 = 128;
        System.out.println(i2 == j2);//输出:false
    }
}

java 在编译 Integer i1 = 127 时,会翻译成 Integer i1 = Integer.valueOf(127)

6. Integer 变量(无论是否是 new 生成的)与 int 变量比较,只要两个变量的值是相等的,结果都为 true。

/**
 * 比较Integer变量与int变量
 */
public class Test {
    public static void main(String[] args) {
        Integer i1 = 200;
        Integer i2 = new Integer(200);
        int j = 200;
        System.out.println(i1 == j);//输出:true
        System.out.println(i2 == j);//输出:true
    }
}

包装类 Integer 变量在与基本数据类型 int 变量比较时,Integer 会自动拆包装为 int,然后进行比较,实际上就是两个 int 变量进行比较,值相等,所以为 true。

1324Java Number & Math 类

(1)Java 会对 -128 ~ 127 的整数进行缓存,所以当定义两个变量初始化值位于 -128 ~ 127 之间时,两个变量使用了同一地址:

Integer a=123;
Integer b=123;
System.out.println(a==b);        // 输出 true
System.out.println(a.equals(b));  // 输出 true

(2)当两个 Integer 变量的数值超出 -128 ~ 127 范围时, 变量使用了不同地址:

a=1230;
b=1230;
System.out.println(a==b);        // 输出 false
System.out.println(a.equals(b));  // 输出 true

1323Java Number & Math 类

/**
* @author Dale
* java中的自动装箱与拆箱
* 简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。
*/
public class Number {
    public static void main(String[] args) {
        /**
        Integer i1 = 128;  // 装箱,相当于 Integer.valueOf(128);
        int t = i1; //相当于 i1.intValue() 拆箱
        System.out.println(t);
        */

        /**
        对于–128到127(默认是127)之间的值,被装箱后,会被放在内存里进行重用
        但是如果超出了这个值,系统会重新new 一个对象
        */
        Integer i1 = 200;
        Integer i2 = 200;

        /**
        注意 == 与 equals的区别
        == 它比较的是对象的地址
        equals 比较的是对象的内容
        */
        if(i1==i2) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
    }
}