zoukankan      html  css  js  c++  java
  • 9月29日课后动手动脑

    1.

    运行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};

      运行结果:

       结果分析:

        枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。可以使用“==”和equals()方法直接比对枚举变量的值,这两种比较方法在枚举中作用相同。

     2.

    Java中的数是采用上述反码、补码跟原码中哪种码表示的

     a.原码定义(摘自百度百科):一种计算机中对数字的二进制定点表示方法,原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1,

         举例:2->00000010,-2->10000010,+0->00000000,-0->10000000;

        小数的原码:对十进制小数乘以2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用2乘小数部分,结果再取整数部分,如此反复,直到小数部分为0或达到精度为止。第一次得到的为最高位,最后一次得到为最低位。

       b.补码(摘自百度百科):在计算机系统中,数值一律用补码来表示和存储

        举例(二进制):整数补码(正整数补码与原码相同)  +9的补码是00001001,负数补码   -5:11111011(求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1)

             数0的补码表示是唯一的:00000000

             小数的补码:正数的补码与原码相同,负数的补码规则与负整数相同,举例:0.1011为正数,补码与原码真值一致。仍为0.1011,-0.0101为负数,补码为1.1011

       c.反码(二进制):正数反码:正数的反码与原码相同。负数:负数的反码,符号位为“1”,数值部分按位取反。举例:7-> 0 0000111 ,-7-> 1 1111000

    首先先猜想是由原码表示,程序验证

    1         int a=1;
    2         int b=-1; 3 int sum=a+b; 4 System.out.println(sum);

          可知程序的结果为0,而在二进制中00000001+10000001=10000010,换算成十进制为-2。显然出错,故java中数值并非是由原码储存

          同理,在使用反码表示时,也会出现同样的问题: (00000001) 反+ (11111110)反 = (11111111)反 = ( -0 )

          而在补码中这没有这个问题:(00000001)补 + (11111111)补 = (00000000)补 = ( 0 )

          所以在java中,数值是由补码表示的

    3.

    Java变量遵循“同名变量的屏蔽原则”

    测试代码:


    public class Test {
    private static int value=1;
    public static void main(String[] args) {
    int value=2;
    System.out.println(value);
    }
    }

    测试结果:

     结果分析:每个变量都有一个有效区域,即定义的那片区域,出了这个区域,变量将不再有效。(全局变量除外)

    4.

    java中有8种基本数据类型:byte、int、short、long、boolean、char、float、double
    对应的类为:Byte、Int、Short、Long、Boolean、Charecter、Float、Double
    逻辑型:boolean
    文本型:char
    整数型:byte、short、int、long
    浮点型:float、double
    byte:    1字节 -128~127
    short:   2字节 -2^15~2^15-1
    int :      4字节 -2^31~2^31-1
    long:    8字节 -2^63~2^63-1
    boolean:1字节 true false(java中不能以0或非0代替)
    float:    4字节 -3.403E38~3.403E38
    double:8字节 -1.798E308~- 4.9E324
    char:    2字节  ’u0000‘~‘ ’uffff ‘(16进制的,换算过来即0~65535)
    (1字节等于8位)
    结论:数据从int向长整型浮点数转化会丢失精度。
     
    5.
     
    测试代码:

    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类型的数值进行计算, 其结果是不精确的。

    5.

    使用BigDecimal类来解决浮点数不精确的问题

    测试代码:


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

    测试结果:

     测试分析:在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。

    6.

    测试代码:

    package test;

    public class demo100 {
    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");

    }
    }

    测试结果:

     测试分析:任何字符与字符串相加都是字符串,但是是有顺序的,字符串前面的按原来的格式相加,字符串后面的都按字符串相加。

  • 相关阅读:
    mysql 查看并修改默认端口号
    安装MySQL-python 的问题
    mysql安装使用
    SAE部署Django1.6+MySQL
    Yii2框架学习 4-2小部件学习 (DetailView、ActiveForm、GridView 、ActionColumn 动作列的配置属性)
    Yii2框架学习 3-4 查询构建器QueryBuilder 的学习
    Yii2框架学习 4-2 HTML助手类、 Array Helper助手类
    Yii2框架学习 3-3 单条数据详情展示; 数据关联查询时 hasOne和hasMany
    Yii框架学习 3-2 数据库操作--ActiveRecord 操作和生命周期
    Yii2框架学习 3-1 yii连接数据库和使用数据库 数据库查询总结
  • 原文地址:https://www.cnblogs.com/buyaoya-pingdao/p/13751697.html
Copyright © 2011-2022 走看看