• 零碎知识点汇总


    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。

  • 相关阅读:
    TCP/IP三次握手四次挥手
    注解(JDK1.5之后)
    枚举(JDK1.5之后)
    局部内部类
    非静态内部类
    静态内部类
    匿名内部类
    接口
    根父类:java.lang.Object
    native关键字
  • 原文地址:https://www.cnblogs.com/ray-freedom/p/5933182.html
Copyright © 2020-2023  润新知