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); } } } enum Size{SMALL,MEDIUM,LARGE};
(1)当s与t引用同一个对象时s==t为true。
(2)getclass()为返回Class类型的对象。isPrimitive()Class为判断是否为
原始数据类型(boolean、char、byte、short、int、long、float、double)
(3)valueOf()将普通字符串转为枚举实例,就如同 Integer.valueOf(String str)将String转为Integer类型一样。
(4)values()方法可以把枚举变成枚举类型的数组方便访问。
以下为运行结果
可见枚举类型并不是原始数据类型,它的每个值都引用一个对象,相同的值引用同一个对象。
枚举类型可以用==比较变量的值。
枚举类型相当于一个类,里面可以有方法如:
public class test10 { public static void main(String[] args) { for(int i=0;i<3;i++) { Size.showSize(i); } } } enum Size{ small("SMALL"),medium("MEDIUM"),large("LARGE"); private String size; private Size(String size) { this.size=size; } public static void showSize(int n) { switch(n) { case 0: System.out.println(Size.small);break; case 1: System.out.println(Size.medium);break; case 2: System.out.println(Size.large);break; } } };
运行结果
2.二进制表示正数和负数
反码,补码,原码这些在上学期计算机导论与c语言程序设计中都有个介绍。
(1)原码:十进制数的二进制表示方式,最高位为符号位,0为正,1为负。
如-1的原码:10000000 00000000 00000000 00000001
1的原码::00000000 0000000 00000000 00000001
(2)反码:正数的反码为它本身,负数的反码为除最高位其余为取反(1变为0,0变为1)。
如-1的反码:11111111 11111111 11111111 11111110
(3)补码:正数的补码为它本身,负数的补码为反码加1。
如-1的补码:11111111 11111111 11111111 11111111
位操作
(1)m<<n:把m的二进制表示左移n位,高位舍弃,低位补0。
(2)m>>n:把m的二进制表示右移n位,m为正数高位补0,m为负数高位补1。
(3)m>>>n:把m的二进制表示右移n为,不论正负高位补0。
可以利用位操作观察java的二进制运算,以及原码,反码,补码的操作原理
如1<<2 1的二进制00000000 00000000 00000000 00000001运算后00000000 00000000 00000000 0000100得到4.
int i=1<<2; System.out.println(i);
3.java的同名变量屏蔽原则
每一个变量都有自己的有效区,出了这个区域则不再有效。
局部变量会屏蔽全局变量中相同名字的变量。
以下为测试代码:
public class test10 { final int NUM=100; public static void main(String[] args) { int NUM=10; System.out.println(NUM); } }
输出结果
可见main方法中的NUM将全局变量NUM屏蔽了。
如,输出语句中的i报错,是因为for中定义的i的有效区域就是for循环,出了区域不再有效,i需重新定义。
4.
char类型 位数 2 范围 0-65535
byte类型 位数:8 范围 -128~127
int类型 位数:32 范围:-2147483648~2147483648。
short类型 位数:16 范围-32768~32768
long类型 位数 64 范围 -9223372036854775808 ~9223372036854775807
float类型 位数 32 范围 1.4E-45~3.4028235E38
double类型 位数 64 范围 4.9E-324 ~1.7976931348623157E308
整型之间从小位数到大位数的转换并不会出现精度损失,然而整型与浮点型之间的转换会产生精度损失,而浮点型之间的转换并不会出现精度损失。
5.
以下为运行结果
第一个先输出“X+Y=”为String类,所以后面的X,Y也按String类处理,并不会加在一起。
第二个X+Y为int型加在一起输出300,最后输出String类型“=X+Y”。