java基础api题

java基础api题文章目录 Java 常见 API 面试题 自动装箱与拆箱 包装类型的常量池技术了解么 Integer a 127 与 Integer b 127 相等吗 String 的创建机理是什么 什么是字符串常量池 String 是最基本的数据类型吗 String s new String abc 创建了几个字符串对象

大家好,我是讯享网,很高兴认识大家。



文章目录

  • Java常见API面试题
      • 自动装箱与拆箱
      • 包装类型的常量池技术了解么?
      • Integer a= 127 与 Integer b = 127相等吗
      • String的创建机理是什么?什么是字符串常量池?
      • String 是最基本的数据类型吗
      • String s = new String(“abc”);创建了几个字符串对象
      • String为什么是不可变的吗?是否可以继承 String 类
      • 在使用 HashMap 的时候,用 String 做 key 有什么好处?
      • String str="i"与 String str=new String(“i”)一样吗?
      • String 类的常用方法都有那些?
      • String和StringBuffer、StringBuilder的区别是什么?
      • 字符型常量和字符串常量的区别?
      • java 中 IO 流分为几种?
      • 对象序列化流
      • BIO,NIO,AIO 有什么区别?

Java常见API面试题

自动装箱与拆箱

装箱:将基本类型用它们对应的引用类型包装起来;原理:Integer.valueOf() 方法

拆箱:将包装类型转换为基本数据类型;原理:Integer.intValue() 方法

Java 为每个原始类型提供了包装类型:

原始类型: boolean,char,byte,short,int,long,float,double

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

包装类型的常量池技术了解么?

Java 基本类型的包装类的大部分都实现了常量池技术。

,,, 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据, 创建了数值在 [0,127] 范围的缓存数据, 直接返回 or 。

Integer a= 127 与 Integer b = 127相等吗

如果整型字面量的值在-128到127之间,那么自动装箱时不会new新的Integer对象,而是直接引用常量池中的Integer对象,超过范围 a1==b1的结果是false

 
讯享网 

String的创建机理是什么?什么是字符串常量池?

  • 创建机理:由于String在Java世界中使用过于频繁,为了提高内存的使用率,避免开辟多块空间存储相同的字符串,引入了字符串常量池(字符串常量池位于堆内存中)
  • 运行机制:在创建字符串时 JVM 会首先检查字符串常量池,如果该字符串已经存在池中,则返回它的引用,如果不存在,则实例化一个字符串放到池中,并返回其引用

String 是最基本的数据类型吗

不是。Java 中的基本数据类型只有 8 个,除了基本类型,剩下的都是引用类型基本数据

类型中用来描述文本数据的是 char,但是它只能表示单个字符,如果要描述一段文本,就需要使用 char 类型数组,但是使用数组过于麻烦,所以就有了 String,String 底层就是一个 char java基础api题 类型的数组,只是使用的时候开发者不需要直接操作底层数组,使用更加简便

String s = new String(“abc”);创建了几个字符串对象

当JVM遇到上述代码时,会先检索常量池中是否存在“abc”,如果不存在“abc”这个字符串,则会先在常量池中创建这个字符串。然后再执行new操作,在堆内存中创建一个String对象,对象的引用赋值给s。此过程创建了2个对象。

当然,如果检索常量池时发现已经存在了对应的字符串,那么只会在堆内创建一个新的String对象,此过程只创建了1个对象。

String为什么是不可变的吗?是否可以继承 String 类

final修饰的String类,代表了String类的不可被继承,final修饰的char[]代表了被存储的数据不可更改被创建,是无法修改的,即便你在后面拼接一些其他字符,也会把新生成的字符串存到另外一个地址但是,虽然final代表了不可变,但仅仅是引用地址不可变,并不代表了数组本身不会变。

在使用 HashMap 的时候,用 String 做 key 有什么好处?

因为字符串是不可变的,所以当创建字符串时,它的 hashcode 被缓存下来,不需要再次计算,所以相比于其他对象更快。

String str="i"与 String str=new String(“i”)一样吗?

不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分到堆内存中。

String 类的常用方法都有那些?

讯享网

String和StringBuffer、StringBuilder的区别是什么?

  • 可变性:

    String类中使用字符数组保存字符串,,所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,,这两种对象都是可变的。

  • 线程安全性:

    String中的对象是不可变的,也就可以理解为常量,线程安全。

    StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的

    StringBuilder并没有对方法进行加同步锁,所以是非线程安全的

  • 性能:

    每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象

    StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

总结:

1、在字符串内容不经常发生变化的业务场景,优先使用String类,例如常量声明、少量的字符串拼接操作等。

2、在单线程环境下,频繁地进行字符串的操作,建议使用StringBuilder,例如SQL语句拼装、JSON封装等

3、在多线程环境下,频繁地进行字符串的操作,建议使用StringBuffer,例如XML解析、HTTP参数解析与封装

字符型常量和字符串常量的区别?

形式 : 字符常量是单引号引起的一个字符,字符串常量是双引号引起的 0 个或若干个字符

含义 : 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)

占内存大小 : 字符常量只占 2 个字节; 字符串常量占若干个字节 (注意: 在 Java 中占两个字节

java 中 IO 流分为几种?

 

对象序列化流

讯享网

BIO,NIO,AIO 有什么区别?

小讯
上一篇 2024-12-30 09:21
下一篇 2025-01-01 09:04

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/5313.html