java细节

    技术2022-05-20  43

    //byte 类型最大为127 public class Test { static int i;//不能放在main函数中,静态变量没有初始值是可以的 int y;//错误 public static void main(String[] args) { // TODO Auto-generated method stub //float f=1.3; //static int i=12; 这句是错误滴 /*在类中定义静态变量的本意是让所有的对象共享这个变量, 如果在方法里面定义静态变量的话就存在逻辑错误了, 方法内的变量也是在方法调用时候才 开始分配内存, 所以在方法定义静态变量根本没有任何意义. */ int a[]=new int[5]; System.out.println(a[2]); int a2[]; //错误,需要初始化 System.out.println(a2[2]); System.out.println(i); //System.out.print(y); int m=1; int n=2; //&两边的变量需要时逻辑变量 //if(m & n){错误 //System.out.println("OK!"); //} if(m==1 & n==2){ System.out.println("OK!"); } } }  

     

     

    有道题目是 Math.Round(11.5) 与Math.Round(-11.5)的值。

     

    一个同事是java的,直接答道,不就是12和-11么。

     

    另外一个同事是搞.Net的,写了个程序,结果是12和-12。

     

    咦?结果怎么不一样?

     

    分别查了java帮助文档和MSDN帮助文档,才发现,原来,是标准不同引起的。

     

    java的Round,是+0.5取整,所以,结果当然是12和-11了。

     

    而.net的不同,而且描述也负责的多。在它的备注里,有这么一条说明:

     

    此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或银行家舍入。

     

    哦,到此为止,终于明白了,为什么会不同。但是,什么又是银行家舍入呢?

     

    找了半天,才找到解释说明:

     

    对于0-9这10个数字来说,他们出现在某一位的几率是相等的。在金融结算中,如果单纯的使用四舍五入,那么,入参(5-9)会比舍参(0-4)多一个,也就是说,金融机构会亏本,考虑到这种情况,也为了舍入更加公平,出现了就近舍入。既然每一位出现0-9的几率相等,那么,该位是偶数还是奇数的几率也就相等,对于舍弃位,0-4舍,6-9进没有什么疑义,主要就在于对中间数5的处理。此时,决定5是否舍弃交由它的前一位决定,如果前一位是偶,则舍弃,如果前一位是奇,则进位,如此,就实现了大致公平的舍入处理。

     

    按照银行家舍入,考虑11.5和-11.5, 对于11.5,5前边是奇数1,故进位,结果为12;对于-11.5,变成了-12。因此,该舍入应该叫做四舍六入五向偶法。

     

    原来如此。

     

     

     

    char ch = ‘/ucafe’;

     

    以/u开头表示这个是Unicode编码

     

    Unicode转义字符:/u 表示16进制的,表示0~65535中的数字。

     

    十六进制中的cafe 也就是十进制中的 12*16^3 + 10*16^2 + 15*16 + 14


    最新回复(0)