1.JDK 和 JRE 有什么区别?
1.1.JRE:Java Runtime Environment(java运行时环境)。即java程序的运行时环境,包含了java虚拟机,java基础类库。
1.2. JDK:Java Development Kit(java开发工具包)。即java语言编写的程序所需的开发工具包。
1.3.JDK包含了JRE,同时还包括java源码的编译器javac、监控工具jconsole、分析工具jvisualvm等。
2.== 和 equals 的区别是什么?
2.1.==:比较两个对象的地址值
2.2.equals:如果对象没有重写object方法,效果和==相同,如果重写了,就按照重写的方法比较。
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,两个对象的 hashCode()相同,equals()不一定 true
4.final 在 java 中有什么作用?
4.1.final修饰类:表示该类不能被继承,被final修饰的类所有成员方法都将被隐式修饰为final方法。
4.2.修饰方法:表示方法不能被重写
4.3.修饰变量:表示变量只能一次复制以后值不能被修改(常量),本质: final修饰的变量会指向一块固定的内存, 这块内存中的值不能改变.引用类型变量所指向的对象之所以可以修改, 是因为引用变量不是直接指向对象的数据, 而是指向对象的引用的
5.java 中的 Math.round(-1.5) 等于多少?
round方法:先将这个数加上0.5然后在像下取整.等于-1
6.String 属于基础的数据类型吗?
String不是基本的数据类型,是final修饰的java类,java中的基本类型一共有8个:byte,char,int,long,short,float,double,boolean
7.java 中操作字符串都有哪些类?它们之间有什么区别?
7.1.String,StringBuffer,StringBuilder
7.2.从类的继承关系上来开的话,String和StringBuffer,StringBuilder是没有任何关系的,但是StringBuffer和StringBuilder的继承关系时一样的.
7.3.这三个类存储的本质都是一个char类型数组.不同的是String类型的数组长度是3,而另外两个数组的长度都是19且默认值为0.
7.4.String : final修饰,String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。
7.5.在StringBuffer类中的方法绝大部分都加了synchronized关键字,而StringBuilder类中则没有,所以说StringBuffer类是线程安全的,而StringBuilder则不是线程安全的.
8.String str="i"与 String str=new String(“i”)一样吗?
不一样,使用String str=“i”,java虚拟机会把它分配到常量池中,而 String str=new String(“i”)创建了一个对象,会被分到堆内存中。
Java为了避免产生大量的String对象,设计了一个字符串常量池。工作原理是这样的,创建一个字符串时,JVM首先为检查字符串常量池中是否有值相等的字符串,如果有,则不再创建,直接返回该字符串的引用地址,若没有,则创建,然后放到字符串常量池中,并返回新创建的字符串的引用地址。
“new Object()”会反映到java堆中,在java堆上创建一个Object类型的实例数据值的结构化内存
9.如何将字符串反转?
9.1.StringBuilder的reverse()方法,最简单
9.2.toCharArray()使用字符串数组,实现从尾部开始逐个逆序放入字符串
9.3.使用String的CharAt方法,使用String的CharAt方法取出字符串中的各个字符,然后插入到字符串中,调用StringBuilder的insert()方法进行操作。
10.String 类的常用方法都有那些?
- indexOf():返回指定字符的索引。
- charAt():返回指定索引处的字符。
- replace():字符串替换。
- trim():去除字符串两端空白。
- split():分割字符串,返回一个分割后的字符串数组。
- getBytes():返回字符串的 byte 类型数组。
- length():返回字符串长度。
- toLowerCase():将字符串转成小写字母。
- toUpperCase():将字符串转成大写字符。
- substring():截取字符串。
- equals():字符串比较。