Java基本语法和基础数据类型——针对实习面试

目录

Java基本语法和基础数据类型

标识符和关键字有什么区别?

标识符

  • 由开发者自定义的,用于标识特定的程序元素
  • 它必须以字母(A-Z或a-z)或下划线(_)开头,后面可以跟字母、数字(0-9)或下划线

关键字

  • 关键字是编程的语言预定义的,具有特殊意义的单词
  • 它们用于表示语言的语法结构,不能用于标识符

Java关键字有哪些?

  • 访问控制:private、protected、public
  • 类,方法和变量修饰符:abstract、calss、estends、final、implents、interface、native、new、static、strictfp、synchronized、transient、volatile、enum
  • 程序控制:break、continue、return、do、while、if、else、for、instanceof、switch、case、default、assert
  • 错误处理:try、catch、throw、throws、finally
  • 包相关:import、package
  • 基本类型:boolean、byte、char、double、float、int、long、short
  • 变量引用:super、this、void
  • 保留字:goto、const

Java基本数据类型有哪些?

Java中的基本数据类型(也称为原始数据类型)包括以下8种:

  1. 整型

    • byte:8位有符号整数,取值范围从-128到127。
    • short:16位有符号整数,取值范围从-32,768到32,767。
    • int:32位有符号整数,默认的整数类型,取值范围从-2,147,483,648到2,147,483,647。
    • long:64位有符号整数,取值范围从-9,223,372,036,854,775,808到9,223,372,036,854,775,807。在数值后加上Ll来表示。
  2. 浮点型

    • float:32位单精度浮点数,遵循IEEE 754标准。在数值后加上Ff来表示。
    • double:64位双精度浮点数,遵循IEEE 754标准,默认的浮点数类型。
  3. 字符型

    • char:16位Unicode字符,可以存储任何字符。
  4. 布尔型

    • boolean:只有两个可能的值:truefalse

什么是自动装箱和拆箱?

在Java中,自动装箱(Autoboxing)和拆箱(Unboxing)是两个与基本数据类型和它们的包装类(Wrapper Classes)之间转换相关的概念。

自动装箱(Autoboxing)

自动装箱是指将Java的基本数据类型自动转换成对应的包装类对象的过程。这种转换是自动进行的,不需要程序员显式地进行类型转换。例如,可以将一个int类型的值直接赋值给一个Integer对象,Java编译器会自动将int装箱为Integer对象。

java 复制代码
Integer integerObject = 10; // 自动装箱,将int类型10转换为Integer对象

自动拆箱(Unboxing)

自动拆箱是指将包装类对象自动转换成对应的基本数据类型的过程。与自动装箱相反,自动拆箱将包装类对象还原为基本数据类型。这同样是由Java编译器自动完成的。

java 复制代码
int intValue = integerObject; // 自动拆箱,将Integer对象转换为int类型的值

自动装箱和拆箱在哪些情况下发生?

自动装箱和拆箱在Java中主要在以下情况下发生:

自动装箱(Autoboxing)发生的情况:

  1. 赋值给包装类对象

    当基本数据类型的值被赋给对应的包装类对象时,会自动装箱。

    java 复制代码
    Integer i = 10; // int 装箱成 Integer
  2. 作为参数传递给接受包装类对象的函数

    当函数的参数是包装类类型时,传递基本数据类型会自动装箱。

    java 复制代码
    void takeInteger(Integer i) {
        // ...
    }
    takeInteger(20); // int 装箱成 Integer
  3. 集合类操作

    当将基本数据类型添加到需要对象的集合类(如ListSetMap等)时,会自动装箱。

    java 复制代码
    List<Integer> list = new ArrayList<>();
    list.add(30); // int 装箱成 Integer
  4. 条件语句

    在某些条件语句中,如ifwhile,基本数据类型会被自动装箱以便与包装类对象进行比较。

    java 复制代码
    if (40 != null) {
        // int 装箱成 Integer,然后与null比较
    }

自动拆箱(Unboxing)发生的情况:

  1. 赋值给基本数据类型的变量

    当包装类对象被赋值给基本数据类型的变量时,会自动拆箱。

    java 复制代码
    Integer i = 50;
    int j = i; // Integer 拆箱成 int
  2. 作为参数传递给接受基本数据类型的函数

    当函数的参数是基本数据类型时,传递包装类对象会自动拆箱。

    java 复制代码
    void takeInt(int i) {
        // ...
    }
    takeInt(60); // Integer 拆箱成 int
  3. 算术运算

    当包装类对象参与算术运算时,会自动拆箱成基本数据类型。

    java 复制代码
    Integer a = 70;
    Integer b = 80;
    int sum = a + b; // 两个Integer对象拆箱成int,然后相加
  4. 比较运算

    当包装类对象使用==进行比较时,会自动拆箱成基本数据类型。

    java 复制代码
    Integer x = 90;
    Integer y = 90;
    boolean equal = x == y; // 两个Integer对象拆箱成int,然后比较
  5. 条件语句

    ifwhile等条件语句中,包装类对象会自动拆箱以便与基本数据类型进行比较。

    java 复制代码
    while (100 < 200) {
        // Integer 拆箱成 int
    }

自动装箱和拆箱使得代码更加简洁,但也要注意它们可能带来的性能影响,特别是在循环和大量数据处理的情况下,因为频繁的装箱和拆箱可能会导致不必要的性能开销。

Java有哪些类型的转换?区别是什么?

Java中有两种主要的类型转换:自动类型转换(也称为隐式类型转换)和强制类型转换(也称为显式类型转换)。

自动类型转换(隐式类型转换)

自动类型转换发生在不同数据类型之间的赋值或参数传递时,当源数据类型的值可以无损失地转换为目标数据类型时,Java编译器会自动进行类型转换。这种转换通常发生在以下几种情况:

  1. 从小到大的转换

    • byteshortcharint,然后到long,最后到floatdouble
    • 例如:byteintintlongfloatdouble
  2. 对象之间的转换

    • 从子类对象到父类对象的引用转换。
    • 例如:Dog dog = new Dog(); Animal animal = dog;(其中DogAnimal的子类)

强制类型转换(显式类型转换)

强制类型转换是程序员明确指定的类型转换,用于将一个类型的值转换为另一个类型的值。如果转换不兼容,编译器会报错。这种转换通常发生在以下几种情况:

  1. 从大到小的转换

    • doublefloat,然后到long,接着到intcharshort,最后到byte
    • 例如:doubleintintbyte
  2. 对象之间的转换

    • 从父类对象到子类对象的引用转换。
    • 例如:Animal animal = new Dog(); Dog dog = (Dog) animal;(其中DogAnimal的子类)
  3. 基本数据类型和字符串之间的转换

    • 基本数据类型到String,以及String到基本数据类型的转换。
    • 例如:int i = 10; String str = String.valueOf(i); 或者 String str = "123"; int i = Integer.parseInt(str);

注意事项

  • 在进行数值类型的强制转换时,可能会发生数值溢出或精度损失。
  • 在进行对象引用的强制转换时,如果转换不兼容,运行时会抛出ClassCastException
  • 字符串到基本数据类型的转换可能会抛出NumberFormatException,如果字符串的内容不能被解析为相应的数值类型。

类型转换是Java编程中的一个重要概念,正确地使用类型转换可以帮助程序员编写出更加灵活和高效的代码。

参考

部分参考Javaguide的关于面试的文档(准备面试的同学强烈推荐!)

链接:https://javaguide.cn/

相关推荐
唐叔在学习10 分钟前
【唐叔学算法】第19天:交换排序-冒泡排序与快速排序的深度解析及Java实现
java·算法·排序算法
music0ant14 分钟前
Idea 配置环境 更改Maven设置
java·maven·intellij-idea
记得开心一点嘛29 分钟前
Nginx与Tomcat之间的关系
java·nginx·tomcat
界面开发小八哥42 分钟前
「Java EE开发指南」如何用MyEclipse构建一个Web项目?(一)
java·前端·ide·java-ee·myeclipse
王伯爵1 小时前
<packaging>jar</packaging>和<packaging>pom</packaging>的区别
java·pycharm·jar
Q_19284999061 小时前
基于Spring Boot的个人健康管理系统
java·spring boot·后端
蹉跎x2 小时前
力扣1358. 包含所有三种字符的子字符串数目
数据结构·算法·leetcode·职场和发展
m0_748245172 小时前
Web第一次作业
java
小码的头发丝、2 小时前
Java进阶学习笔记|面向对象
java·笔记·学习
m0_548514772 小时前
前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
java·前端·javascript