美文网首页
2021-01-31

2021-01-31

作者: 等我攒够六便士_就去找月亮 | 来源:发表于2021-01-31 20:25 被阅读0次

    1.JDK和JRE的区别?

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

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

    2.==和equals的区别?

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

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

    String str1 = "abc";

    String str2 = "abc";

    System.out.println(str1==str2);//true

    String str3 =newString("abc");

    String str4 =newString ("abc");

    System.out.println(str3==str4);//false

    System.out.println(str3.equals(str4));//true

    解析:equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。

    eg.

    Integer i1 = 100, i2 = 100;

    Integer i3 = 1000, i3 = 1000;

    System.out.println(i1==i2);//true

    System.out.println(i3==i4);//false

    解析:在整数的包装类当中,在第一次创建Integer 类的对象的时候,都会首先创建好缓存数组。当需要包装的 值是在IntegerCache数组当中的元素的时候,就会返回数组当中的Integer 对象。JVM 默认就会设置数组的范围为-128 ~ 127 。如下:

    public static Integer valueOf(int i) {

        if (i >= IntegerCache.low && i <= IntegerCache.high)

            return IntegerCache.cache[i + (-IntegerCache.low)];

        return new Integer(i);

    }

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

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

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

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

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

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

    5.String、StringBuffer、StringBuilder的区别?

        String是字符串常量,final修饰;StringBuffer字符串变量(线程安全);StringBuilder 字符串变量(线程不安全).此外StringBuilder和StringBuffer实现原理一样,都是基于数组扩容来实现的.

        StringBuffer和StringBuilder的实现原理一样,其父类都是AbstractStringBuilder.StringBuffer是线程安全的,StringBuilder是JDK 1.5新增的,其功能和StringBuffer类似,但是非线程安全.因此,在没有多线程问题的前提下,使用StringBuilder会取得更好的性能.

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

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

    7. 如何将字符串反转?

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

    String str = "abcdefg";

    StringBuffer stringBuffer = new StringBuffer(str);

    StringBuilder stringBuilder = new StringBuilder(str);

    System.out.println(stringBuffer.reverse());

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

    2)使用String对象的toCharArray()方法,将字符串转换为char[]数组,然后逆向遍历并拼接。

    String str = "abcdefg";

    StringBuilder strNew =new StringBuilder();

    char[] chars = str.toCharArray();

    for(int i = chars.length -1; i >= 0; i--){

        strNew.append(chars[i]);

    }

    3)使用String对象的charAt方法逐个获取字符,正向遍历,逆向拼接

    String str = "abcdefg";

    StringBuilder strNew =new StringBuilder();

    for (int i = 0; i < str.length(); i++) {

        strNew.insert(0, str.charAt(i));

    }

    8.String类的常用方法有哪些?

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

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

    replace():字符串替换。

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

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

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

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

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

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

    substring():截取字符串。

    equals():字符串比较。

    9.普通类和抽象类的区别?抽象类可以用final修饰吗?抽象类和接口的区别?

      1)普通类不能有抽象方法,抽象类可以有也可以没有抽象方法,抽象类不能直接实例化,普通类可以。

      2)抽象类不能用final修饰,因为抽象类的定义就是为了被继承。

      3)抽象类和接口的区别:

          抽象类使用extends继承,接口使用implements实现;

          抽象类可以有构造函数,接口不能有;

          抽象类可以有非抽象接口,接口不能有(java8之后可以有了)

          类可以实现多个接口,但是只能继承一个类;

          接口中的方法默认使用public访问修饰符,抽象类中的方法可以任意访问修饰符(抽象方法不能使用private)

    相关文章

      网友评论

          本文标题:2021-01-31

          本文链接:https://www.haomeiwen.com/subject/pyartltx.html