课堂实验内容
1.Enum是一种类类型,他的对象的值智能是其所有列举项目中的一个。
并且,各个枚举项的对象都是不相同的。
public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Size t=Size.LARGE; //s和t引用同一个对象? System.out.println(s==t); // //是原始数据类型吗? System.out.println(s.getClass().isPrimitive()); //从字符串中转换 Size u=Size.valueOf("SMALL"); System.out.println(s==u); //true //列出它的所有值 for(Size value:Size.values()){ System.out.println(value); } } } enum Size{SMALL,MEDIUM,LARGE};
false false true SMALL MEDIUM LARGE
2.反码补码原码
在计算机中,原码、反码和补码是表示有符号整数的三种常见方式。在Java中,整数采用补码表示。
原码表示法是将一个数值的绝对值转换为二进制,然后在最高位添加符号位。正数的符号位为0,负数的符号位为1。
反码表示法是在原码的基础上,对负数的其他位取反。正数的反码与原码相同。
补码表示法是在反码的基础上,再加1。正数的补码与原码相同。
下面是一个示例程序,展示了对正数和负数进行各种位操作的结果:
public class BitOperationsExample { public static void main(String[] args) { int num1 = 10; // 正数 int num2 = -10; // 负数 // 位操作示例 System.out.println("原始值:" + num1 + " 的二进制表示:" + Integer.toBinaryString(num1)); System.out.println("原始值:" + num2 + " 的二进制表示:" + Integer.toBinaryString(num2)); // 按位取反 System.out.println("~" + num1 + " = " + (~num1)); System.out.println("~" + num2 + " = " + (~num2)); // 按位与 int andResult = num1 & num2; System.out.println(num1 + " & " + num2 + " = " + andResult); // 按位或 int orResult = num1 | num2; System.out.println(num1 + " | " + num2 + " = " + orResult); // 按位异或 int xorResult = num1 ^ num2; System.out.println(num1 + " ^ " + num2 + " = " + xorResult); // 左移 int leftShiftResult = num1 << 2; System.out.println(num1 + " 左移 2 位:" + leftShiftResult); // 右移 int rightShiftResult = num1 >> 2; System.out.println(num1 + " 右移 2 位:" + rightShiftResult); // 无符号右移 int unsignedRightShiftResult = num2 >>> 2; System.out.println(num2 + " 无符号右移 2 位:" + unsignedRightShiftResult); } }
结果:
原始值:10 的二进制表示:1010
原始值:-10 的二进制表示:11111111111111111111111111110110
~10 = -11
~-10 = 9
10 & -10 = 2
10 | -10 = -2
10 ^ -10 = -4
10 左移 2 位:40
10 右移 2 位:2
-10 无符号右移 2 位:1073741821
3.大数
浮点数类型后位置上的数字不准确
为了更准确的进行浮点数的运算可以使用大数类
import java.math.BigDecimal; public class TestBigDecimal { public static void main(String[] args) { BigDecimal f1 = new BigDecimal("0.05"); BigDecimal f2 = BigDecimal.valueOf(0.01); BigDecimal f3 = new BigDecimal(0.05); System.out.println("下面使用String作为BigDecimal构造器参数的计算结果:"); System.out.println("0.05 + 0.01 = " + f1.add(f2)); System.out.println("0.05 - 0.01 = " + f1.subtract(f2)); System.out.println("0.05 * 0.01 = " + f1.multiply(f2)); System.out.println("0.05 / 0.01 = " + f1.divide(f2)); System.out.println("下面使用double作为BigDecimal构造器参数的计算结果:"); System.out.println("0.05 + 0.01 = " + f3.add(f2)); System.out.println("0.05 - 0.01 = " + f3.subtract(f2)); System.out.println("0.05 * 0.01 = " + f3.multiply(f2)); System.out.println("0.05 / 0.01 = " + f3.divide(f2)); } }
运行结果:
下面使用String作为BigDecimal构造器参数的计算结果: 0.05 + 0.01 = 0.06 0.05 - 0.01 = 0.04 0.05 * 0.01 = 0.0005 0.05 / 0.01 = 5 下面使用double作为BigDecimal构造器参数的计算结果: 0.05 + 0.01 = 0.06000000000000000277555756156289135105907917022705078125 0.05 - 0.01 = 0.04000000000000000277555756156289135105907917022705078125 0.05 * 0.01 = 0.0005000000000000000277555756156289135105907917022705078125 0.05 / 0.01 = 5.000000000000000277555756156289135105907917022705078125
可以看到,在字符串上对浮点数进行计算的结果是比double要准确的
4.字符串拼接
在Java中先读取到字符串后对后面所有的+和数据都会看成字符串进行拼接
package 测试; public class Test { public static void main(String[] args) { int X=100; int Y=200; System.out.println("X+Y="+X+Y); System.out.println(X+Y+"=X+Y"); } }
结果:
X+Y=100200 300=X+Y