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 的源码有关,上面我推荐的那篇博客里有详解,有兴趣的可以阅读一下。

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

Java中关于数据类型的一些问题的更多相关文章

  1. Java中的数据类型及相互转换方法

    本文主要讲解两个部分: 一.Java中的数据类型有哪些? 二.数字类型和字符串类型相互转换的方法? 一.Java中的数据类型有哪些: Java中的数据类型有:基本数据类型和引用数据类型: 基本数据类型 ...

  2. Java中基本数据类型和包装类

    参考:深入剖析Java中的装箱和拆箱; Java中基本数据类型和包装类互转中 缓冲机制的使用; java学习笔记:装箱和拆箱,包装器和缓冲池 Java 各 类型数据在内存中分配情况详解 一 java内 ...

  3. java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;

    <java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...

  4. 讲说问题:|和||的区别以及&和&&的区别。2、Java中的数据类型分几类?基本数据类型有哪些?

    |和||的区别以及&和&&的区别. |或 为或运算 判断为逻辑或 || 为短路或 只有逻辑判断 当左侧为真不再继续判断 &与 为与运算 判断为逻辑与 && ...

  5. Java中基本数据类型byte的溢出问题

    Java中基本数据类型byte的溢出问题 问题源于:https://www.cnblogs.com/HuoHua2020/p/12326631.html 定义两个byte类型的数据,将其之和赋值给一个 ...

  6. 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型

    010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...

  7. 零基础学习java------day2------关键字、标志符、常量、进制键的转换、java中的数据类型、强制类型转换的格式

    今日内容要求: 1. 了解关键字的概念及特点,了解保留字 2. 熟练掌握标识符的含义,特点,可使用字符及注意事项 3. 了解常量的概念,进制,进制之间相互转换,了解有符号标识法的运算方式 4. 掌握变 ...

  8. Java中基本数据类型的对比记忆

    Java中八种基本类型数据情况: 数据类型 所占字节数 所占位数(二进制位数) 可表示范围 默认值 包装类 备注 byte(字节) 1 8 -128 - 127  0  Byte   short(短整 ...

  9. java中的数据类型

    通常情况下,为了方便物品的存储,我们会规定每个盒子可以存放的物品种类,就好比在"放臭袜子的盒子"里我们是不会放"面包"的!同理,变量的存储也讲究"分门 ...

随机推荐

  1. 8.python3实用编程技巧进阶(三)

    3.1.如何实现可迭代对象和迭代器对象 #3.1 如何实现可迭代对象和迭代器对象 import requests from collections.abc import Iterable,Iterat ...

  2. PyCharm注释中出现中文运行报错的解决办法

    SyntaxError: Non-UTF-8 code starting with '..... 方法一:在文件首行加上 # -*- coding:utf-8 -*- 方法二:更改编码格式 File ...

  3. emacs 矩形操作

    emacs 矩形操作 如果使用图形化(GUI)的eamcs,使用M-x cua-mode,很好用,但是如果不是图形化的emacs(emacs -nw)的话,矩形操作就不能使用cua-mode. 非图形 ...

  4. Weblogic的三种部署方式

    Weblogic的三种部署方式     在weblogic中部署项目通常有三种方式:第一,在控制台中安装部署:第二,将部署包放在domain域中autodeploy目录下部署:第三,使用域中配置文件c ...

  5. openresty安装笔记

    目录 安装步骤: openresty安装在ubuntu下的安装 参考 安装OpenResty(Nginx+Lua)开发环境 安装步骤: # 创建目录/usr/servers,以后我们把所有软件安装在此 ...

  6. MQTT linux centOS7 部署

    系统版本centos7 X64 1.设置保存安装包路径 # cd /usr/local/src 2.开始下载源包 官网资源: https://mosquitto.org/files/source/ # ...

  7. 6.GC垃圾回收算法和垃圾收集器的关系

    JAVAGC垃圾回收机制和常见垃圾回收算法 推荐博客:JVM垃圾回收机制和常见垃圾回收算法 JVM的内存结构.垃圾回收算法

  8. 【cf375】D. Tree and Queries(dsu on tree+线段树)

    传送门 题意: 给出一颗以\(1\)为根的有根树,每个结点有个颜色\(c_i\). 之后要回答\(m\)组询问,每组询问包含\(v_i,k_i\),要回答以\(v_i\)为根的子树中,颜色出现次数不小 ...

  9. SpringMVC的Java API(五)

    1. HttpMessageConverter消息转换器 (1) HttpMessageConverter接口源码: public interface HttpMessageConverter< ...

  10. 1+x 证书 web 前端开发 HTML5 - 新增的元素,删除的元素

    官方QQ群 1+x 证书 web 前端开发 HTML5 - 新增的元素,删除的元素 http://blog.zh66.club/index.php/archives/197/