public static boolean isOdd(int i){
return( i & 1 ) != 0;//而不是return i % 2== 1;考虑到负数,
并不是所有的小数都可以用二进制浮点数来表示,二进制浮点对于货币计算通常是不合适的。在需要精确答案的 地方,要避免使用float、double。要使用int、long、bigDecimal。
public class Change{
public static void main (String args[]){
System.out.print(( 200 - 100) +"cents");//使用int型,用小的单位来表示。
}
java不具有目标确定类型的特性,存储结果的变量类型会影响计算所使用的类型。一天里的毫秒数除以微秒数,在操作很大的数字时千万要防止溢出。
public class longDivision{
public static void main(String args[]){
final long MICRO_PER_DAY = 24L * 60 * 60 * 1000 * 1000;
final long MILLIS_PER_DAY = 24L * 60 * 60 * 1000;
System.out.print(MICRO_PER_DAY/MILLIS_PER_DAY);
}
}
public class Elementary{
public static void main(String args[]){
System.out.print(12345 + 5432L);//用大写的L
}
}
5、十六进制数。通常避免混合类型的计算。
数字0cacfebdaf是int常量,由于最高位被置位,所以是一个负数,要想变为正的需在后便加上L。
如果最初的数值类型是有符号的,就执行符号扩展,如果它是char,不管它将要转换 成什么类型,都执行零扩展。
public class DosEquis{
public static void main(String args[]){
char x = 'X';
int i = 0 ;
System.out.print(true ? x : 0);
System.out.print(false ? i : x);
}
}
此程序输出的是X88。这是怎么回事呢?原因在于混合计算。
如果一个操作数的类型是T,T代表byte、short、char,而另一个操作数是int,则它的值可以用T类型表示
但如果第一个是int型,则对操作数类型进行二进制数字的提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。