标签:int 对象 符号 表示 作用域 参数 占用 sys size
为什么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×102+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。
标签:int 对象 符号 表示 作用域 参数 占用 sys size
原文地址:http://www.cnblogs.com/andibier/p/7629023.html