Java 基础

1. JDK和 JRE 有什么区别?

JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。

JRE:Java Runtime Environment 的简称,Java运行环境,为 Java 的运行提供了所需环境。

具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。

2. ==和 equals 的区别是什么?

==解读

对于基本类型和引用类型 == 的作用效果是不同的,如下所示:

基本类型:比较的是值是否相同;

引用类型:比较的是引用是否相同;

代码示例:

String x = "string";

String y= "string";

String z= new String("string");

System.out.println(x==y); //true

System.out.println(x==z); //false

System.out.println(x.equals(y)); //true

System.out.println(x.equals(z)); //true

代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。

equals解读

equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。看下面的代码就明白了。

首先来看默认情况下 equals 比较一个有相同值的对象,代码如下:

classCat {publicCat(String name) {this.name =name;

}privateString name;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}

}

Cat c1 = new Cat("王磊");

Cat c2= new Cat("王磊");

System.out.println(c1.equals(c2)); //false

输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 equals 源码就知道了,源码如下:

publicboolean equals(Object obj) {return (this ==obj);

}

原来 equals 本质上就是 ==

那问题来了,两个相同值的 String 对象,为什么返回的是 true?代码如下:

String s1 = new String("老王");

String s2= new String("老王");

System.out.println(s1.equals(s2)); //true

同样的,当我们进入 String 的 equals 方法,找到了答案,代码如下:

public booleanequals(Object anObject) {if (this ==anObject) {return true;

}if (anObject instanceofString) {

String anotherString=(String)anObject;int n =value.length;if (n ==anotherString.value.length) {char v1[] =value;char v2[] =anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] !=v2[i])return false;

i++;

}return true;

}

}return false;

}

原来是 String 重写了 Object 的 equals 方法,把引用比较改成了值比较。

总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

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

不对,两个对象的 hashCode() 相同,equals() 不一定 true。

代码示例:

String str1 = "通话";

String str2= "重地";

System. out. println(String. format("str1:%d | str2:%d", str1. hashCode(),str2. hashCode()));

System. out. println(str1. equals(str2));

执行的结果:

str1:1179395 | str2:1179395

false

代码解读:很显然“通话”和“重地”的 hashCode() 相同,然而 equals() 则为 false,因为在散列表中,hashCode() 相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

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

final 修饰的类叫最终类,该类不能被继承。

final 修饰的方法不能被重写。

final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

5. Java中的 Math. round(-1. 5) 等于多少?

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

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

String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 属于对象。

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

操作字符串的类有:String、StringBuffer、StringBuilder。

String和 StringBuffer、StringBuilder 的区别在于:

String 声明的是不可变的对象,每次操作都会生成新的String 对象,然后将指针指向新的 String 对象,

而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。

StringBuffer 和 StringBuilder 最大的区别在于:

StringBuffer是线程安全的,而 StringBuilder 是非线程安全的,

但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。

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

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

9.如何将字符串反转?

使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。

示例代码:

//StringBuffer reverse

StringBuffer stringBuffer= newStringBuffer();

stringBuffer. append("abcdefg");

System. out. println(stringBuffer. reverse());//gfedcba//StringBuilder reverse

StringBuilder stringBuilder= newStringBuilder();

stringBuilder. append("abcdefg");

System. out. println(stringBuilder. reverse());//gfedcba

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

indexOf():返回指定字符的索引。

charAt():返回指定索引处的字符。

replace():字符串替换。

trim():去除字符串两端空白。

split():分割字符串,返回一个分割后的字符串数组。

getBytes():返回字符串的 byte 类型数组。

length():返回字符串长度。

toLowerCase():将字符串转成小写字母。

toUpperCase():将字符串转成大写字符。

substring():截取字符串。

equals():字符串比较。

java软件开发工程师面试题_Java开发工程师常见面试题01相关推荐

  1. 【面试题】Redis篇-常见面试题p1

    [面试题]Redis篇-常见面试题p1 备战实习,会定期的总结常考的面试题,大家一起加油!

  2. java多线程常用面试_java的多线程常见面试题

    并行和并发有什么区别? (推荐学习:java常见面试题) 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事件,并发是在同一实体上的多个事 ...

  3. mysql常见面试题及答案_MySQL常见面试题与答案整理

    1.MySQL 中有哪几种锁? 1.表级锁: 开销小, 加锁快: 不会出现死锁: 锁定粒度大, 发生锁冲突的概率最高, 并发度最低. 2.行级锁: 开销大, 加锁慢: 会出现死锁: 锁定粒度最小, 发 ...

  4. java 并发 面试_Java 并发基础常见面试题总结

    1. 什么是线程和进程? 1.1. 何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序即是一个进程从创建,运行到消亡的过程. 在 Java 中,当我们启 ...

  5. Java面试指北!13个认证授权常见面试题/知识点总结!| JavaGuide

    大家好,我是 Guide哥!端午已过,又要开始工作学习啦! 我发现有很多小伙伴对认证授权方面的知识不是特别了解,搞不清 Session 认证.JWT 以及 Cookie 这些概念. 所以,根据我根据日 ...

  6. mysql数据库工程师考证题_100道MySQL常见面试题总结

    原文链接:https://juejin.im/post/5d351303f265da1bd30596f9 前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐 ...

  7. 最新Java面试题2021年,常见面试题及答案汇总

    2021最新Java面试题[附答案解析]java面试题及答案2021,java2021最新面试题及答案汇总,2021最Java面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集 ...

  8. 小博老师收集Java经典面试题 ——Servlet和JSP常见面试题

    [面试题] 1.简单说说tomcat的配置? JAVA_HOME=JDK的根目录 CATALINA_HOME=tomcat的根目录 CATALINA-HOME\conf\server.xml:可以配置 ...

  9. java基本类型的面试,15、基本类型常见面试题

    1.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 +=1;有什么错? 答:对于short s1=1;s1=s1+1来说,在s1+1运算时会自动提升表 ...

  10. SpringMVC常见面试题(5个最常见面试题,回答超详细)

    以下题目顺序根据面试中问的概率排序的,尽量都背下来啊. 目录 面试题一:什么是Spring MVC ?简单介绍下你对springMVC的理解? 面试题二:SpringMVC的工作流程? 面试题三:Sp ...

最新文章

  1. java 操作 word 表格和样式_poi 操作excel和word(修改样式和内容)
  2. 在android studio中配置ndk开发环境
  3. linux 4t磁盘格式化,centos格式化大于2T的硬盘
  4. salesforce 架构设计_关于Salesforce证书维护重要通知
  5. Redis:复制,第2部分——主从复制和Redis哨兵
  6. LeetCode 1115. 交替打印FooBar
  7. mysqlin索引失效的情况
  8. kotlin泛型_Kotlin泛型
  9. ogre的主要渲染流程(转)
  10. WPF Ribbon 开发资料分享
  11. 绘图软件Origin新手使用教程
  12. 阿里云播放器直播rtsp、rtmp、flv流,flash播放直播流
  13. 2021-09-06
  14. CAUSALITY FOR MACHINE LEARNING
  15. 可以自学计算机考证吗
  16. swper_Swiper 中文API手册(share)
  17. PBR基础理论通俗解释
  18. 未收到服务器返回信息吗,inode 未收到服务器回应
  19. 在Windows 7镜像中整合“SP2”补丁
  20. 【测试分析】KYM全面收集测试信息

热门文章

  1. logitech options 蓝牙识别不到设备
  2. 中科曙光Java笔试题_中科金财Java开发工程师笔试题的(带答案).docx
  3. JavaScript操作符
  4. ClusterONE算法详解及优化
  5. python中sign函数图片_机器学习 第33集:什么是sign函数?什么是sigmoid函数?( 含有笔记、代码、注释 )...
  6. 使用Requests和Lxml库,爬取豆瓣读书TOP250
  7. Struts2表单数据校验
  8. c语言 图像形态学滤波,图像处理理论(二)——滤波基础, 形态学, 边缘检测
  9. 程序员自我修养笔记:第八章
  10. jQuery阻止冒泡事件和默认事件