动手动脑1、
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);
}
}
}
运行结果:
结论:枚举类型不是原始类型,它的每一个具体值都引用一个特定对象,相同的值就引用同一对象。使用==与equals方法比较执行效果相同。
动手动脑2:
反码:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位(就是第一位)不变,其余各个位取反.
例(以8位二进制为例):原码00000001(1),10000001(-1)
反码00000001(1),11111110(-1)
0的反码,+0:00000000。-0:11111111。
补码:计算机中二进制形式的补数。补码是用来解决负数在计算机中的表示问题的。正数的补码就是其本身;负数的补码是在其原码的基础上,符号为不变,其余各位取反,最后加1.(即在反码的基础上加1)并且补码解决了0的符号及两个编码的问题。
例(以8位二进制为例):1:00000001。-1:11111111
原码:原码是一种计算机中对数字的二进制定点表示方法。就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.原码的表示法是在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1,其余位表示数值的大小。
例(以8位二进制为例):(1)00000001,(-1)10000001
0的原码有两种,+0:00000000。-0:10000000
Java中的数使用补码表示。
程序验证:
package session;
import java.util.Random;
class text {
private static int value=1;
public static void main(String[] args) {
int i=1;
int j=-1;
System.out.println(i+j);
}
}
运行结果:
原码1+(-1)二进制表示:00000001+10000001=10000010,即结果为-2.显然不是原码表示。
反码1+(-1)二进制表示:00000001+11111110=11111111,结果为-0,也不是反码表示。
补码1+(-1)二进制表示:00000001+11111111=00000000.结果为0,所以java的数采用补码表示。
动手动脑3:
package session;
import java.util.Random;
class text {
private static int value=1;
public static void main(String[] args) {
int value=2;
System.out.println(value);
}
}
运行结果为2;证明全局变量与局部变量同名时,会优先使用局部变量。
结论:每个变量都有一个“有效”的区域(作用域),即变量被定义的区域,而出了这个区域,变量将不再有效(全局变量除外)。Java的同名屏蔽原则,即同名的变量在指定的范围内有自动屏蔽的原则。在程序中局部变量可以与全局变量同名,但在函数内使用这个变量时,会优先用到同名的局部变量,而不是全局变量。
动手实验:
public class TestDouble {
public static void main(String args[]) {
System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
System.out.println("4.015 * 100 = " + (4.015 * 100));
System.out.println("123.3 / 100 = " + (123.3 / 100));
}
}
运行结果:
结论:使用double类型进行运算,结果不准确。
动手动脑4:
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");
}
}
运行结果:
结论:字符串后面使用+会被看成两个字符串的连接,而在字符串之前使用就不会被认为连接。