首页 > 代码库 > JAVA动手动脑
JAVA动手动脑
1.EnumTest.java程序:
package damo;
public class EnumTest {
enum Size{SMALL,MEDIUM,LARGE};
public static void main(String[] args) {
Size s=Size.SMALL;
Size t=Size.LARGE;
//s和t引用同一个对象?false
System.out.println(s==t); //
//是原始数据类型吗?false
System.out.println(s.getClass().isPrimitive());//判断是什么数据类型
//从字符串中转换
Size u=Size.valueOf("SMALL");//将small的值赋给u
System.out.println(s==u); //true
//列出它的所有值
for(Size value:Size.values()){//遍历
System.out.println(value);
}
}
//enum Size{SMALL,MEDIUM,LARGE};
}
运行结果
首先判断s==t?不等所以输出false;第二个判断是否是原始数据类型,不是原始的数据类型,false;第三个s表示SMALL将SMALL赋给了u,u=s,ture;第四、五、六个是遍历,Size{SMALL,MEDIUM,LARGE}中有三个数据,所以遍历是三个数据。
结论:
枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象
2.数值的二进制
数在计算机中是以二进制形式表示的。
数分为有符号数和无符号数。
原码、反码、补码都是有符号定点数的表示方法。
原码就是这个数本身的二进制形式。正数的反码和补码都是和原码相同,负数的反码是将其原码除符号位之外的各位求反,负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
3.TestDouble.java程序
源程序:
package damo;
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类型的数值进行计算, 其结果是不精确的
为什么double类型的数值进行运算得不到“数学上精确”的结果
java中double类型数据是用64位来表示的,精度肯定是有限的,浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。在需要更高精度的运算过程中,有两种方法可供参考:1. 自己用超过64位来表示一个double类型,比如用100个byte[]来表示一个double(800bytes);这样的话,double的加减乘除就需要自己实现一遍了。很多IT公司有这样的面试题。2. 用java自带的BigDecimal类可以方便做高精度的运算。(c++中是没有BigDecimal这种方面的类的,所以只能用第一种方法)
4.
int X=100;
intY=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
程序结果
原因:+X+Y表示连续输出x和y的值,第二个表示两数相加
JAVA动手动脑