zoukankan      html  css  js  c++  java
  • Java中关于数据类型的一些问题

    Java中关于数据类型的一些问题

    总结一下最近笔试遇到的一些关于Java中数据类型的一些问题。

    虽然比较基础,但在实际做题却很容易出错的点,而且往往这些题出错了会给面试官很不好的感觉:你的基础不好。

    1、Java中八大基本数据类型。

    •  布尔型:boolean
    • 字符型:char
    • 整型:byte,short,int,long
    • 浮点型:float,double

    所占字节大小分别为:boolean(1字节)、char(2字节)、short(2字节)、int(4字节),float(4字节)、long(8字节)、double(8字节)。

     这其中 boolean用于存储逻辑变量(true、false),char 用于存储一个字符,而利用 char 保存整数也是可以通过的,看下面这串代码:

    public class B {
    public static void main(String[] args){
    char c=33;
    int a=c;
    System.out.println(c);
    System.out.println(a);
    }
    }

     可以看到编译可以通过,但是在 c 中存储的值却并不是数字,而是该数字对应的 ASCII 码。

    下面是其他数据类型:

    需要注意的一点是:在 Java 中,如果输入小数,系统默认为 double 类型,如果想输入 11.1 浮点型,则需 float f= 11.1f;

    2、基本数据类型之间的转换

    遵循规则:从范围小到范围大数据类型自动进行类型转化;从范围大到范围小数据类型则需要进行强制转化,这个过程容易发生数据丢失。

    转化顺序如下:

    从左到右能被编译器能自动转化,从右往左则需进行强制转化,但容易发生溢出。

    Java中,运算符会自动进行类型转化,包括强制类型转化,包括 +=,-=,*=,/=,++,--,%=。

    且在三目运算符中,结果会向较大类型进行转化,如下:

    可以看到程序有错误,因为 1.0 是 double 类型,等号左边必须和右边类型最高者匹配。

    3、基本数据类型的包装类型

    Java中每个基本数据类型对应一个包装类型。

    • boolean:Boolean
    • byte:Byte
    • char:Character
    • short:Short
    • int:Integer
    • long:Long
    • float:Float
    • double:Double

    可以看到只有 char 和 int 的包装类型会比较麻烦一点,其他的都是基本数据类型首字母大写。

    包装类型的作用:

    1. 实现基本类型之间的转换。
    2. 便于函数传值。
    3. 在一些要用到 Object 的地方,方便将将基本数据类型转化为对象。

    4、自动装箱和自动拆箱

    基本数据类型转化为其对应的包装类型就称为自动装箱,反之就是自动拆箱。

    这里我推荐一篇详解的博客:https://www.cnblogs.com/wang-yaz/p/8516151.html

    5、数据类型之间的==和equals()

    ==和equals()都是做比较经常用到的方法。

    (1)、==使用分为两种

    • 比较基本数据类型是,比较其值是否相等。
    • 比较对象时,比较两个对象的内存引用,即比较 JVM 内存区域的堆中内容是否相等。

    (2)、equals()

      equals()方法是 Object()类中,当然每个对象会重写这个方法,用于判断两个对象是否相等。

    下面来看一些比较:

    public class IsEquals {
        public static void main(String[] args){
            int i=42;
            float f=42.0f;
            long l=42;
            double d=42.0;
            System.out.println(i==f);
            System.out.println(i==l);
            System.out.println(i==d);
            System.out.println(f==l);
            System.out.println(f==d);
            System.out.println(l==d);
        }
    }

    public class D {
        public static void main(String[] args){
            Integer I=42;
            Float F=42.0F;
            Long L=42L;
            Double D=42D;
            long l=42;
            System.out.println(I.equals(F));
            System.out.println(I.equals(L));
            System.out.println(I.equals(D));
        }
    }

    (需要注意包装类型的赋值都需要表明类型,如 Long L=42L(l),不写会出错,这里 L 和 l 都可以)

    上面分别是基本数据类型之间的比较和包装类型之间的比较,下面来看一下两者之间的比较:

    public class C {
        public static void main(String[] args){
            Integer I=42;
            int i=42;
            Float F=42.0F;
            float f=42.0f;
            System.out.println(I==i);
            System.out.println(I==f);
            System.out.println(I.equals(i));
            System.out.println(I.equals(F));
            System.out.println(I.equals(f));
        }
    }

    可以看到==在包装类型和基本数据类型的比较还是比较其值,所以这里的 I 和 i、f 都是相等的。

    而使用 Integer.equals 时,由于重写了 equals方法,从下面的源码可以看出,不同类型的会直接返回 false。

    public boolean equals(Object obj) {
      if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
      }
      return false;
    }

    6、记录一个有趣的问题:

    public class E {
        public static void main(String[] args){
            Integer a=100;
            Integer b=100;
            Integer c=200;
            Integer d=200;
            System.out.println(a==b);
            System.out.println(a.equals(b));
            System.out.println(c==d);
            System.out.println(c.equals(d));
        }
    }

     

     Integer 的值若在(-128,128]之间,只要未使用 new 的形式新建对象,相同的整型得到的都是同一个对象的引用,具体原因和 Integer 的源码有关,上面我推荐的那篇博客里有详解,有兴趣的可以阅读一下。

    吾生也有涯,而知也无涯。

     

  • 相关阅读:
    最新sql遇到的问题
    js高级
    oracle数据库子查询的结果需要使用多次解决办法
    Rocket 命令
    mysql锁
    mysql sql优化思路
    jenkins-系统管理-节点管理进去报错
    数据同步工具 DataX 的使用
    java ScriptEngine 使用 (支持JavaScript脚本,eval()函数等)
    shell脚本批量压缩log文件并备份
  • 原文地址:https://www.cnblogs.com/hzauxx/p/11567422.html
Copyright © 2011-2022 走看看