面试必知的15道Java数据类型题

简介: 面试必知的15道Java数据类型题

1、Java 的基本数据类型都有哪些各占几个字节?

image.png

2、String 是最基本的数据类型吗?

不是,String是引用类型,底层是用char数组实现的。

Java 中的基本数据类型只有8 个:byteshortintlongfloatdoublecharboolean;除了基本类型(primitive type),剩下的都是引用类型(referencetype), Java 5 以后引入的枚举类型也算是一种比较特殊的引用类型。

3、运行short s1 = 1, s1 = s1 + 1 ;会出现什么结果?运行short s1 = 1; s1 += 1 ;又会出现什么结果?

  • 运行第一个会报错,因为1是int类型,而s是short类型,通过+运算后s1自动转换成int型。错误提示:Error:(21, 17) java: 不兼容的类型: 从int转换到short可能会有损失
  • 运行第二个是正确的,s1=2,+1是int类型的操作,s1自动转换int类型

4、int 和Integer 有什么区别?

Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),int 的包装类就是Integer,从Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

  • 原始类型: boolean, char, byte, short, int, long, float,double
  • 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
public class AutomaticUnboxing {
   
   
    public static void main(String[] args) {
   
   
        Integer a1 = 100,a2 = 100,z3 = 139, z4 =139;
        System.out.println(a1 == a2); //true
        System.out.println(z3 == z4); //false
    }
}

如果整型字面量的值在-128 到127 之间,那么不会new 新的Integer对象,而是直接引用常量池中的Integer 对象

5、float f=3.4;是否正确?

不正确。3.4是双精度。将双精度型(double) 赋值给浮点型(float)属于下转型( down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。

6、用最高效率的方法算出2 乘以8 等于多少。

移位运算符:int i = 2 << 3;

7、String 类常用方法

方法 描述
int length() 返回此字符串的长度
int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引
int indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索
int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引
String concat(String str) 将指定字符串连接到此字符串的结尾。
boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。
String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串
String trim() 返回字符串的副本,忽略前导空白和尾部空白
boolean equals(Object anObject) 将此字符串与指定的对象比较。

8、String 、 StringBuffer 、 StringBuilder 的区别?

1、可变与不可变

String:字符串常量,在修改时不改变自身;若修改,等于生成新的字符串对象

StringBuffer:在修改时会改变对象自身,每次操作都是对 StringBuffer 对象本身进行修改,不是生成新的对象;使用场景:对字符串经常改变情况下,主要方法: append insert ()等。

2、线程是否安全

String:对象定义后不可变,线程安全。

StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区大量数据。

StringBuilder :是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。

3、共同点

StringBuilder 与 StringBuffer 有公共父类 AbstractStringBuilder(抽象类)。

public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence

public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence

StringBuilder、StringBuffer 的方法都会调用 AbstractStringBuilder 中的公共方法,如 super.append(...)。只是 StringBuffer 会在方法上加 synchronized 关键字,进行同步。最后,如果程序不是多线程的,那么使用StringBuilder 效率高于StringBuffer。

对于三者使用的总结

  • 如果要操作少量的数据用 = String

  • 单线程操作字符串缓冲区下操作大量数据 = StringBuilder

  • 多线程操作字符串缓冲区下操作大量数据 = StringBuffer

9、 while 和do while 有什么区别?

while是先判断再执行;do...while是先执行再判断,同等条件下,后者多执行了一次。

10、switch 语句能否作用在byte 、long 、String 上?

  • 可以用在byte、int、short、char以及它们的封装类上
  • 不能用在其他基本类型上long、double、float、boolean以及封装类
  • jdk1.7及以上,可以用以字符串
  • 可以用于枚举类型

11、String s =new String("xyz");,创建了几个String 对象?二者之间再什么区别。

创建了2个对象,一个是内存中的“xyz”,还有一个是s,指向xyz

12、自动装箱与拆箱

自动装箱:将基本类型用他们的引用类型包装起来

自动拆箱:将包装类型转换为基本类型

13、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加 0.5 然后进行下取整

14、下面代码运行结果是多少?

int count = 0;
for (int k = 0; k < 100; k++) {
   
   
    count = count++;
}
System.out.println(count);

解析:++是先赋值,再自增,所以count永远是0

15、Java中基本类型是如何转换的?

基本类型等级从低到高:

  • byte、short、int、long、float、double
  • char、int、long、float、double

自动转换:运算过程中,低级可以自动向高级进行转换

强制转换:高级需要强制转换成低级,可能会丢失精度

规则

  • = 右边先自动转换成表达式中最高级的数据类型,再进行运算。整型经过运算会自动转化最低 int 级别,如两个 char 类型的相加,得到的是一个 int 类型的数值。
  • = 左边数据类型级别 大于 右边数据类型级别,右边会自动升级
  • = 左边数据类型级别 小于 右边数据类型级别,需要强制转换右边数据类型
  • char 与 short,char 与 byte 之间需要强转,因为 char 是无符号类型
相关文章
|
24天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
64 2
|
13天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
38 14
|
23天前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
29天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
17天前
|
Java
Java基础之数据类型
Java基础之数据类型
17 6
|
18天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
25 6
|
18天前
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
42 7
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
52 4
|
29天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
35 1
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。