一:运行源代码EnumTest.java,分析运行结果。
代码如下:
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};
结果截图:
枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中。而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似。不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围。
二:原码,反码,补码的区别辨析
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值,
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
示例程序:
public class qq {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(0xffffffff);
}
}
得到结果为-1
java中数据使用的是反码表示的。
三:通过原始类型的包装类完成类型转换
源代码:
public class qq {
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));
}
}
截图:
四:Java变量遵循“同名变量的屏蔽原则”
Java变量是有作用域的。如果两个作用域完全不同的变量同名,不会引起冲突。
举一个简单的例子:一班有一个学生叫小明,二班也有一个学生叫小明,在一班和二班分开上课的时候,点名就不会有冲突。
验证代码:
public class qq {
/**
* @param args
*/
private static int code=12;
public static void main(String[] args) {
// TODO Auto-generated method stub
int code=-10;
System.out.println(code);
}
}
结果截图:
五:为什么double类型的数值进行运算得不到“数学上精确”的结果?
这个涉及到二进制与十进制的转换问题。
N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×10²+2×10+3×(10的0次幂)+4×(10的-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(2的0次幂)+0+1×(2的-2次幂)=十进制的3.25。
double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。
六:java中输出格式
源代码如下:
public class qq {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
}
}
结果截图:
因为+X+Y表示只是输出X和Y的值,X+Y表示输出X+Y的值。