会这些Java工程师面试题,月薪至少3W①

​关于JVM 、JDK和JRE
JVM
Java虚拟机(JVM)是运行Java字节码的虚拟机。在java中,将虚拟机可以读懂的代码,称之为字节码。这里记住不要混淆了。是将虚拟机可以读懂的代码称之为字节码。也就是java中的class文件。而不是机器可以读懂的代码,机器可以读懂的那个二进制命令,是0和1组成的文件。JVM有针对不同系统的特定实现(Windows、Linux、macOS),目的是使用相同的字节码,它们都会给出相同的结果。

Java程序从源代码到运行一般有以下三步

在这里插入图片描述
总结
Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现,目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的JVM实现是Java语言“一次编译,随处运行”的关键所在。

JDK和JRE
JDK:Java Development Kit,是功能齐全的Java SDK。拥有JRE所拥有的一切,还有编译器(javac)和工具(如javadoc和jdb),是Java开发运行环境,在程序员的电脑上当然要安装JDK。

JRE:Java Runtime Environment,Java运行时环境,是运行已编译Java程序所需的所有内容的集合,包括Java虚拟机(JVM),Java类库,Java命令和其他一些基础构件,但是不能用于创建新程序。

简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK 是 Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。

如果只是运行项目的话,安装JRE就可以了,但是如果要编写程序的话就要安装JDK,JDK中包含了Javac编译器,jdk包含jre。

字符型常量与字符串常量的区别
形式上:字符常量是单引号引起的一个字符;字符串常量是双引号引起的几个字符

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

占内存大小:字符常量只含2个字节;字符串常量占若干个字节

String、StringBuffer和StringBuilder的区别
String
String类是不可变类,String类中使用final关键字修饰字符数组来保存字符串:private final byte value[],所以String对象是不可变的。看到这里,有些小伙伴就疑惑了,比如有如下代码:

String a = “123”;
a = “456”;
// 打印出来的a为456
System.out.println(a)
这里的a这不是已经被修改了么,为什么还说String是一个不可变类呢?

这是因为,第二次给a赋值的时候,并不是对原来堆空间里的对象重新赋值,而是生成一个新的实例对象,并且指向"456"这个字符串,之前的对象"123"还存在,如果没有被再次引用,则会被垃圾回收。

StringBuffer与StringBuilder
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类,和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串char[] value但是没有用final关键字修饰,所以这两种对象都是可变的。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

三者的区别
字符修改上的区别(主要)

String:不可变字符串;

StringBuffer:可变字符串、效率低、线程安全;

StringBuilder:可变字符序列、效率高、线程不安全;

初始化上的区别,String可以空赋值,后者不行,报错

对于三者的使用总结
操作少量的数据:适用String

单线程操作字符串缓冲区下操作大量数据:适用StringBuilder

多线程操作字符串缓冲区下操作大量数据:适用StringBuffer

   今天就先这三道吧,加油!

在这里插入图片描述
欢迎关注,回复 项目实战 领资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值