zoukankan      html  css  js  c++  java
  • 动手动脑

    一.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};  输出的结果是:false false true SMALL MEDIUM LARGE

    结论:枚举类型是引用类型,不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。

    二.Addition.java

    代码:


    // An addition program

    import javax.swing.JOptionPane;  // import class JOptionPane

    public class Addition {
       public static void main( String args[] )
       {
          String firstNumber,   // first string entered by user
                 secondNumber;  // second string entered by user
          int number1,          // first number to add
              number2,          // second number to add
              sum;              // sum of number1 and number2

          // read in first number from user as a string
          firstNumber =
             JOptionPane.showInputDialog( "Enter first integer" );

          // read in second number from user as a string
          secondNumber =
             JOptionPane.showInputDialog( "Enter second integer" );

          // convert numbers from type String to type int
          number1 = Integer.parseInt( firstNumber );
          number2 = Integer.parseInt( secondNumber );

          // add the numbers
          sum = number1 + number2;

          // display the results
          JOptionPane.showMessageDialog(
             null, "The sum is " + sum, "Results",
             JOptionPane.PLAIN_MESSAGE );

          System.exit( 0 );   // terminate the program
       }
    }

     三.java中的类型转换

    1.Int 32位  取值范围为 -2147483648~2147483647
    2.Short 16位 取值范围为 -32768~32767
    3.long 64位  取值范围为 -9223372036854774808~9223372036854774807
    4.float 32位 取值范围为 3.402823e+38 ~ 1.401298e-45
    5.double 64位  取值范围为 1.797693e+308~ 4.9000000e-324
    7.boolean 试编译环境而定
    8.byte 8位 取值范围为 -128~127

    四.TestDouble.java

    代码:

    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));
        }
    }

    输出的结果是:

    0.05 + 0.01 = 0.060000000000000005
    1.0 - 0.42 = 0.5800000000000001
    4.015 * 100 = 401.49999999999994
    123.3 / 100 = 1.2329999999999999

    结论:

    使用double类型的数值进行计算, 其结果是不精确的。

    五.为什么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次方)。

    举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。
    简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

    六.TestBigDecimal.java

    代码:

    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));

    }

    }

    下面使用String作为BigDecimal构造器参数的计算结果:
    0.05 + 0.01 = 0.06
    0.05 - 0.01 = 0.04
    0.05 * 0.01 = 0.0005
    0.05 / 0.01 = 5
    下面使用double作为BigDecimal构造器参数的计算结果:
    0.05 + 0.01 = 0.06000000000000000277555756156289135105907917022705078125
    0.05 - 0.01 = 0.04000000000000000277555756156289135105907917022705078125
    0.05 * 0.01 = 0.0005000000000000000277555756156289135105907917022705078125
    0.05 / 0.01 = 5.000000000000000277555756156289135105907917022705078125

    七.以下代码的输出结果是什么?
      int X=100;
      int Y=200;
      System.out.println("X+Y="+X+Y);
      System.out.println(X+Y+"=X+Y");

     代码:

    public class Plus {

        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=100200
    300=X+Y

    结论:在System.out.println()中,如果在string字符串后面是+和变量,会把变量转换成string类型,加号起连接作用,然后把两个字符串连接成一个新的字符串输出;如果先有变量的加减运算再有字符串,那么会从左到右先计算变量的加减,然后再与后面的string结合成一个新的字符串。也就是说加号只有在两个string类型或者其中一个是string类型的时候才起到连接作用,否则仍然是运算符。

  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/tiantain1015/p/4856090.html
Copyright © 2011-2022 走看看