目录
String str="i"与 String str=new String(“i”)一样吗?
在String s = new String(“xyz”);中,创建了几个字符串对象?
数组有没有 length()方法?String 有没有 length()方法?
在使用 HashMap 的时候,用 String 做 key 有什么好处?
String和StringBuffer、StringBuilder的区别是什么?(之前也提到过)
Integer a= 127 与 Integer b = 127相等吗?
反射
什么是反射机制?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射机制优缺点?
反射机制的应用场景有哪些?
Java获取反射的三种方法?
public class Student{
private int id;
String name;
protected boolean sex;
public float score;
}
public class Get{
//获取反射机制三种方式
public static void main(String[] args) throws ClassNotFoundException {
//方式一(通过建立对象)
Student stu = new Student();
Class classobj1 = stu.getClass();
System.out.println(classobj1.getName());
//方式二(所在通过路径-相对路径)
Class classobj2 = Class.forName("fanshe.Student");
System.out.println(classobj2.getName());
//方式三(通过类名)
Class classobj3= Student.class;
System.out.println(classobj3.getName());
}
}
常用API
String相关
字符型常量和字符串常量的区别?
1. 形式上: 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符
什么是字符串常量池?
字符串常量池位于堆内存中,专门用来存储字符串常量,可以提高内存的使用率,避免开辟多块空间存储相同的字符串。在创建字符串时 JVM 会首先检查字符串常量池,如果该字符串已经存在池中,则返回它的引用,如果不存在,则实例化一个字符串放到池中,并返回其引用。
String 是最基本的数据类型吗?
String有哪些特性?
String为什么是不可变的?
/** The value is used for character storage. */private final char value[];
String真的是不可变的吗?
String str ="Hello";
str = str +" World";
System.out.println("str="+ str);
// 创建字符串"Hello World",并赋给引用s
String s = "Hello World";
System.out.println("s = " + s); // 输出:s = Hello World
// 获取String类中的value字段
Field valueFieldOfString = String.class.getDeclaredField("value");
// 改变value属性的访问权限
valueFieldOfString.setAccessible(true);
// 获取s对象上的value属性的值
char[] value = (char[]) valueFieldOfString.get(s);
// 改变value所引用的数组中的第5个字符
value[5] = '_';
System.out.println("s = " + s); // 输出:s = Hello_World
s = Hello Worlds = Hello_World
是否可以继承 String 类?
String str="i"与 String str=new String(“i”)一样吗?
在String s = new String(“xyz”);中,创建了几个字符串对象?
两个对象,一个是静态区的"xyz",一个是用new创建在堆上的对象。
代码解析:
String str1 = "hello"; // str1指向静态区
String str2 = new String("hello"); // str2指向堆上的对象
System.out.println(str1.equals(str2)); // true
System.out.println(str2.equals(str4)); // true
System.out.println(str1 == str3); // true
System.out.println(str1 == str2); // false
System.out.println(str2 == str4); // false
System.out.println(str2.equals("hello")); // false
str2 = str1;
System.out.println(str2 == "hello"); // true
如何将字符串反转?
StringBuffer和StringBuilder都用于构建和操作字符串,但StringBuilder是非线程安全的,而StringBuffer是线程安全的。在每次操作字符串时,StringBuilder会生成一个新的字符串,而StringBuffer则不会。因此,StringBuilder在单线程环境下通常会比StringBuffer更高效。
// 使用StringBuffer翻转字符串
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("abcdefg");
System.out.println(stringBuffer.reverse()); // 输出: gfedcba
// 使用StringBuilder翻转字符串
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("abcdefg");
System.out.println(stringBuilder.reverse()); // 输出: gfedcba
数组有没有 length()方法?String 有没有 length()方法?
String 类的常用方法都有那些?
在使用 HashMap 的时候,用 String 做 key 有什么好处?
HashMap 内部实现是通过 key 的 hashcode 来确定 value 的存储位置,因为字符串是不可变的,所以当创建字符串时,它的 hashcode 被缓存下来,不需要再次计算,所以相比于其他对象更高效。
String和StringBuffer、StringBuilder的区别是什么?(之前也提到过)
可变性
线程安全性
性能
对于三者使用的总结
Date相关
包装类相关
自动装箱与拆箱是什么?
int 和 Integer 有什么区别?
Integer a= 127 与 Integer b = 127相等吗?
public class Main {
public static void main(String[] args) {
Integer a = new Integer(3); // 创建一个Integer对象,值为3
Integer b = 3; // 自动装箱,将整数3转换为Integer类型
// 比较引用,而不是值
System.out.println(a == b); // false,因为两个引用指向不同的对象
int c = 3; // 声明一个int类型的变量,值为3
// a自动拆箱成int类型再和c比较
System.out.println(a == c); // true,因为自动拆箱后比较的是值
// 比较两个整数值,这两个对象引用相同
System.out.println(b == c); // true
// 在这个例子中,即使值相同,但由于Integer的缓存机制,
// 对象引用可能不同(取决于值是否在-128到127的范围内)
Integer a1 = 128; // 超出缓存范围,创建新对象
Integer b1 = 128; // 同上,创建新对象
System.out.println(a1 == b1); // false,因为两个引用指向不同的对象
// 在这个例子中,由于值在缓存范围内,JVM会返回相同的对象引用
Integer a2 = 127; // 创建对象,如果值在缓存范围内,和下面的一样
Integer b2 = 127; // 创建对象,和上面的一样
System.out.println(a2 == b2); // true,因为两个引用指向同一对象
}
}