零碎知识点汇总

1、枚举类型的检验

      运行下列代码,有何结果?

 1 package demo;
 2 public class EnumTest {
 3 
 4     public static void main(String[] args) {
 5         Size s=Size.SMALL;
 6         Size t=Size.LARGE;
 7         //s和t引用同一个对象?
 8         System.out.println(s==t);  
 9         //是原始数据类型吗?
10         System.out.println(s.getClass().isPrimitive());//getClass()表示获得当前对象的类型。
11         //isPrimitive()确定s.getClass()是否为一个基本类型(但很显然不是,因为是我们自己定义的)
12         //从字符串中转换
13         Size u=Size.valueOf("SMALL");
14         System.out.println(s==u);  //true
15         //列出它的所有值
16         for(Size value:Size.values()){
17             System.out.println(value);
18         }
19     }
20 
21 }
22  enum Size{SMALL,MEDIUM,LARGE};

      运行结果为:false false true SMALL MEDIUM LARGE。
      结果分析:1)Size s=Size.SMALL;Size t=Size.LARGE;所以很显然,s并不等于t。2)因为s是自己定义的枚举类型,所以不是一个基本类型,所以是false。3)因为u和s引用的是同一个对象,所以相等。4)for循环输出Size内部的值。

2、变量的作用域

      Java变量是有作用域的。如果两个作用域完全不同的变量同名,不会引起冲突。就好比一班和二班都有人叫奥巴牛,在一班和二班分开上课的时候,点名就不会有冲突。如果一个班有两个奥巴牛,那就会产生冲突。

      但是如果类里面定义一个x,在这个类的函数中也定义一个x,这种情况不会冲突,默认会优先使用函数中的x,这算是有冲突但是用默认谁优先来解决,这算是一种特殊情况。

检验如下:

      从实验结果来看,当有同名变量时,会优先使用函数中的变量。

3、Java中的类型转换

      实线箭头表示无精度损失,虚线箭头表示有精度损失。

      byte占1个字节,取值范围为-128~127;

      short占2个字节,取值范围为-32768~32767;

      int占4个字节,取值范围为-2147 483 648~2147 483 647;

      long占8个字节,取值范围为-9223 372 036 854 775 808~9223 372 036 854 775 807;

      char占2个字节,取值范围为-128~127;

      float占4个字节,取值范围为3.4E-38~3.4E+38;

      double占8个字节,取值范围为1.7E-308~1.7E+308;

由以上知识,可以得知,由整型转换成浮点型时,是会损失精度的。而整型之间的转换不会损失精度。

4、为何doube类型的数值运算得不到“数学上精确”的结果?

      有如下程序:

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型的数值运算得不到精确的结果呢?

   因为在十进制转换为二进制的时候可能会不准确(如:2.2),这样就导致了误差问题,所以在浮点数表示中,都可能会不可避免的产生些许误差!在单精度转换为双精度的时候,也会存在同样的误差问题。

         详细参见:http://www.cnblogs.com/xugang/archive/2010/05/04/1727431.html

5、字符联接操作

      The sum is " + sum 使用运算符 + 连接字面量“The sum is” 和计算结果 sum将String 和其它数据类型相加,结果是一个新的String。
      实例程序代码:

 

 1 public class Try {
 2 
 3     public static void main(String[] args) {
 4         int X=100;
 5         int Y=200;
 6         System.out.println("X+Y="+X+Y);
 7         System.out.println(X+Y+"=X+Y");
 8 
 9     }
10 
11 }

 

      结果截图:

      结果分析:

"X+Y="+X+Y 先输出左边的字符串,此处的+X+Y表示和其它数据类型相加,结果是一个新的String。所以直接在后面加上X和Y的值。
 X+Y+"=X+Y"左边因为X和Y都是int型的数据,所以X+Y就是它们的和,即300。

 

posted @ 2016-10-06 13:51  暮光之城管  阅读(418)  评论(0编辑  收藏  举报