zoukankan      html  css  js  c++  java
  • 课程作业第二题

    为什么java规定作为程序入口点的main()方法是静态的?
    回答:非静态成员函数在执行前必须先构造并实例化该函数所在的类。如果允许非静态的main,那么main函数所在的类必须先进行实例化,那么就需要写个函数去实例化main所在的类,再调用main,这个实例化的代码有些在哪里呢?如果它也是非静态的,岂不是又要写个函数去实例化它所在的类吗?因此,java语言就规定了main必须是静态的。
    每个变量都有一个有效的区域(成为作用域),出了这个区域,变量将不再有效。
    publiv class Text{
    private static int value=1;
    public static void main(String[] args){
    int value=2;
    System.out,println(value);
    }
    }
    请看上面的示例代码,输出结果是什么?
    输出结果:2
    为什么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,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
    在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发精度问题。(为什么会这样呢?)
    参数类型为double的构造方法的结果有一定的不可预知性。有人可能认为在Java中写入newBigDecimal(0.1)所创建的BigDecimal正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于0.1000000000000000055511151231257827021181583404541015625。这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。
    以下代码的输出结果是什么?
    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;
    为什么会有这样的输出结果呢?
    因为+号是在java做了运算符重载
    通俗一点的解释: 假如 x = 10, y = 20 x= 为一个字符串 ,y= 为一个字符串 "x=" + x 的意思就是 吧 "x=" 这字符串和x这个变量的值拼接起来组成一个新的字符串(str1): x=10 "x=" + x + ",y=" 前面拼接的str1 在和 ",y=" 这个字符串拼接成一个新的字符串 (str2): x=10,y= "x=" + x + ",y=" + y 前面拼接的str2 和y这个变量的值拼接组成一个新的字符串,成为最终的字符串: x=10,y=20。

  • 相关阅读:
    Linux makefile教程之概述一[转]
    Valid Parentheses
    Letter Combinations of a Phone Number
    机器学习经典分类算法 —— C4.5算法(附python实现代码)
    3Sum Closest
    3Sum
    Integer to Roman
    寒假文献阅读(四)
    Longest Common Prefix
    Roman to Integer
  • 原文地址:https://www.cnblogs.com/andibier/p/7629023.html
Copyright © 2011-2022 走看看