一、枚举类型
(1)题目
(2)源代码
1 public class EnumTest { 2 3 public static void main(String[] args) { 4 Size s=Size.SMALL; 5 Size t=Size.LARGE; 6 //s和t引用同一个对象? 7 System.out.println(s==t); //false 8 //是原始数据类型吗? 9 System.out.println(s.getClass().isPrimitive());//false 10 //从字符串中转换 11 Size u=Size.valueOf("SMALL"); 12 System.out.println(s==u); //true 13 //列出它的所有值 14 for(Size value:Size.values()){ 15 System.out.println(value);// 16 } 17 } 18 19 } 20 enum Size{SMALL,MEDIUM,LARGE};
(3)运行结果
(4)分析
s 和 t 进行==运算输出false 说明s和t所指向的不是同一个地址
s.getClass().isPrimitive()输出false 说明枚举类型不是原始类型
s和u进行==运算输出true,说明两者指向的是同一个地址
(5)结论
枚举类型不是基本类型,引用比较的是时候比较的是地址而不是存在里面的常量。
二、同名屏蔽
(1)题目
(2)源代码
public class SameName { private int value=1; public static void main(String[] args) { int value =2; System.out.println(value); } }
(3)运行结果
(4)分析
每个变量都有自己的作用域,出了这个区域的变量就不再有效。
三、TestDouble
(1)题目
(2)源代码
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)); } }
(3)结果
(4)分析
浮点型并不是精确的
四、TestBigDecimal
(1)题目
(2)源代码
import java.math.BigDecimal; public class TestBigDecimal { public static void main(String[] args) { BigDecimal f1 = new BigDecimal("0.05"); BigDecimal f2 = BigDecimal.valueOf(0.01); BigDecimal f3 = new BigDecimal(0.05); System.out.println("下面使用String作为BigDecimal构造器参数的计算结果:"); System.out.println("0.05 + 0.01 = " + f1.add(f2)); System.out.println("0.05 - 0.01 = " + f1.subtract(f2)); System.out.println("0.05 * 0.01 = " + f1.multiply(f2)); System.out.println("0.05 / 0.01 = " + f1.divide(f2)); System.out.println("下面使用double作为BigDecimal构造器参数的计算结果:"); System.out.println("0.05 + 0.01 = " + f3.add(f2)); System.out.println("0.05 - 0.01 = " + f3.subtract(f2)); System.out.println("0.05 * 0.01 = " + f3.multiply(f2)); System.out.println("0.05 / 0.01 = " + f3.divide(f2)); } }
(3)运行结果
(4)分析
说明使用double作为BigDecimal的构造器的计算结果还是不准确的,用String类型是准确的
五、输出表达式
(1)题目
(2)源代码
public class SameName { 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"); } }
(3)结果
(4)分析
第一次输出是输出了字符串“X+Y=”后接着连续输出了X和Y的值,即将X和Y变为了字符串。
而第二次输出则是X和Y的值的和以及字符串的内容。
(5)结论
在进行输出时,如果字符串在前,那么在字符串后的内容都会变成字符串。