9.13完成ppt动手动脑问题
枚举类型问题:
private enum Size{
SMALL,MEDIUM,LARGE
}
public static void main(String[] args) {
Size s = Size.SMALL;
Size t = Size.valueOf("SMALL");
System.out.println(t.valueOf("SMALL"));
for(Size value:Size.values()) {
System.out.println(value);
}
}
运行结果:
枚举类中valueOf()方法为将普通字符串转换为枚举实例,
private enum MyEnum{
ONE,TWO,THREE
}
public static void main(String[] args) {
for(MyEnum value:MyEnum.values()) {
System.out.println(value);
}
运行结果:
枚举类中values()方法为以数组形式返回枚举类型的所有成员。
结论:
枚举类型是引用类型,枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。
数值的二进制表示:
原码:十进制数据的二进制表现形式就是原码,原码最左边的一个数字就是符号位,0为正,1为负。
反码:正数的反码是其本身(等于原码),负数的反码是符号位保持不变,其余位取反。
补码:正数的补码是其本身,负数的补码等于其反码 +1。
隐式类型转换:
public class Test {
public static void main(String[] args) {
// 小的数据类型往大的数据类型进行转换底层就是通过左补零完成的
byte a = 10; // 0000 1010
int b = a; // 0000 0000 0000 0000 0000 0000 0000 1010
System.out.println(b);
}
}
强制类型转换:
public class Test {
public static void main(String[] args) {
int a = 300; // 0000 0000 0000 0000 0000 0001 0010 1100
byte b = (byte) a; // 0010 1100
System.out.println(b); // 打印出44
/*
int a = 200; // 0000 0000 0000 0000 0000 0000 1100 1000
byte b = (byte)a; // 1100 1000
System.out.println(b); // 打印出-56
*/
}
}
变量的作用域:
public class demo {
private static int value=1;
public static void main(String[] args) {
int value = 2;
System.out.println(value);
}
}
运行结果:
经过多次实验得到的结论:
java中变量遵循就近原则,首先在自己的类中寻找变量,再去类外以及其他地方寻找,输出靠自己近的变量值。
double类型的数值进行计算,其结果是不精确的:
public class demo {
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类型进行计算可能会导致结果不精确。这是因为double类型是一种浮点数类型,它在内存中以二进制形式表示小数。由于计算机在二进制中无法精确表示所有的小数,所以在进行运算时可能会出现舍入误差。
为了解决这个问题,可以考虑使用其他数据类型,例如BigDecimal。BigDecimal可以精确表示任意长度和精度的十进制数,因此在需要精确计算的场景下更为适用。另外,还可以注意避免在计算中频繁进行浮点数的加减乘除操作,尽量使用整数进行计算,再将结果转换为浮点数。
总之,在使用double类型进行计算时,要时刻注意结果可能存在误差,并根据实际需求选择合适的数据类型来进行计算。
子串联接操作:
public class demo {
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=”的字符串,后面的+则相当于把X和Y依次添加到前面字符串的结尾,所以最后输出的是X+Y=100200
第二个输出语句中从左往右依次进行,首先是X+Y,为100+200结果为300,Y后的+相当于把300添加在后门“=X+Y”字符串的前方,所以最后的输出结果为300=X+Y。