欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

归纳知识总结与面试题

程序员文章站 2022-06-27 16:13:40
归纳知识总结与面试题型...

归纳知识总结与面试题型(2020-11-22起 持续更新)

一、Java 基础

1. jre与jdk的区别

  • jre:Java Runtime Environment 的简称,是运行环境,安装jre会自带JVM虚拟机,java源码需要使用虚拟机才能运行在windows或者Linux系统上运行
  • jdk:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境 下载jdk时也包含jre。
  • 分析:具体来说需要运行java代码jre就行了,而需要开发编写java程序,只需jdk就够了

2.equals与==的区别

Student s=new Student("a", 18); 
Student s1=new Student("a", 18);
System.out.println(System.identityHashCode(s)); //打印内存地址2018699554
System.out.println(System.identityHashCode(s1));//打印内存地址1311053135
System.out.println(s==s1);//false
---------------------------------------------------------------------
//每个类的内存地址都是随机变化的 但每个对象的内存地址不可能一样
//如果要判断对象是否一样就需要在Student类里重写equals方法了 
//我们使用的是开发工具的快捷生成 方法体重还是使用==判断值的
public class Student {
		private String name;
		private int num;
		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Student other = (Student) obj;
			if (name == null) {
				if (other.name != null)
					return false;
			} else if (!name.equals(other.name))
				return false;
			if (num != other.num)
				return false;
			return true;
		}	
}
  • == 解读:基本类型:比较的是值是否相同;引用类型:比较的是引用是否相同;
  • equals:是Object类下的方法,在object类里比较的是内存地址,是==,而String类里重写了equal方法,里面比较的是值的内容,如果需要比较对象里的值时,需要重写equals方法
  • 总结== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

1 答案是不对,两个对象的 hashCode()相同,equals()不一定 true。
因为我们可以重写ehashCode的规则使其内存地址样,也可以重写equals,改变 比较的方法,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

4. final 在 java 中有什么作用?

  1. 被final修饰的类 不能被其他类继承
  2. 被final修饰的变量只能赋值初始值一次,如果没有赋值初识值,编译器则报错;
  3. 被final修饰的方法不能被子类重写
  4. 总结:final是常量的意思,被修饰是变量、方法、类是不能被修改的;

5. java 中的 Math.round(-1.5) 等于多少?

等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。

6. String 属于基础的数据类型吗?

String不是基本数据类型,基本数据类型有:byte int short lang double float boolean char 属于java中的基本数据类型,String是不可变的引用数据类型.
注意:String是java.lang包下的一个类,底层是Cahr[] value数组是被final修饰的

7. java 中操作字符串都有哪些类?它们之间有什么区别?

  1. java中操作字符串的类有String,StringBuffer,StringBuilder三大类
  2. String与StringBuffer,StringBuilder的区别:首先String是不可变字符串 底层是一个被File修饰的Object数组,所以是不可变的,每次创建一个String对象会在常量池创建出来,然后将指针重新指向他,如:“a”+“ab”=“aab”,字符串常量池会创建这三个不一样的对象.
  3. StringBuffer与StringBuilder是可变字符串,在抽象类 AbstractStringBuilder底层也是char[] value,但没有被final修饰
//通过反射拿到抽象类char数组的源码 
	StringBuffer buff=new StringBuffer("123");
		Class c=buff.getClass();
		Class superC= c.getSuperclass();
		Field f=  superC.getDeclaredField("value");
		f.setAccessible(true);
		char[] vlaue=(char[]) f.get(buff);
		System.out.println(vlaue);//123[][][][][][][][][]... 这里是初识容量16;
		
  1. StringBuffer与StringBuilder的区别:1.他们都是可变字符串,StringBuffer底层的方法大部分是用synchronize关键字修饰的,是线程安全的,StringBuilder是非线程安全的 2.StringBuffer的toString是带缓冲的,而StringBuilder的toString是直接取对象.
  2. 总结:String:适用于少量的字符串操作的情况,StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况,StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

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

内存地址的分配会不一样
如图:
归纳知识总结与面试题

9. 如何将字符串反转?

使用StringBuffer和StringBuilder的reverse()方法.注:String没有reverse()方法

		StringBuffer t=new StringBuffer("123456789");
		t=t. reverse() ;
		System.out.println(t);//987654321

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

  1. equals()比较String的值
  2. indexOf()传入字符串,找到该字符串返回该字符所在位置,未找到返回-1
  3. charAt():返回指定索引处的字符。
  4. replace():字符串替换。
  5. trim():去除字符串两端空白。
  6. split():分割字符串,返回一个分割后的字符串数组。
  7. getBytes():返回字符串的 byte 类型数组。
  8. length():返回字符串长度。
  9. toLowerCase():将字符串转成小写字母。
  10. toUpperCase():将字符串转成大写字符。
  11. substring():截取字符串。

11. 抽象类必须要有抽象方法吗?

抽象类里不一定有抽象方法,但有抽象方法的类,一定是抽象类或接口

12.普通类和抽象类有哪些区别?

1.普通类里不能有抽象方法而抽象类可以有
2.抽象可不能实例化(不能直接实例化,直接实例化需要重写抽象方法),而实例类可以实例化

13.抽象类能使用 final 修饰吗?

抽象类是不能被final修饰的,抽象类的其实就是让其子类继承的,被final修饰后就抽象类就没有任何意义了!

14. 接口和抽象类有什么区别?

本文地址:https://blog.csdn.net/weixin_48269369/article/details/109913483