JAVA常见的API

一、Math.Round(11.4)和Math.Round(-11.4)的结果分别是多少?

输出结果分别为11和-11,round(四舍五入的原理是对原数字加上0.5之后再取整);

二、switch能否作用在byte、long、String类型上?

java5之前,switch后面跟的参数只能是byte、short、char、int,但是从java5开始,引入了enum(枚举)类型;

从java7开始,引入了String类型,但是long类型不能使用

三、String、StringBuffer、StringBuilder的区别

  1. String由final修饰,字符本身不能被改变;

对于上图描述的,看似是对str进行改变,其实str只是一个引用对象,在第二行操作后,让str从"abc"的引用指向了一个新的字符串"bcd"的引用,这两个对象并没有任何变化;

  1. StringBuffer和StringBuilder都可以对对象进行直接地修改;

  2. StringBuilder是java5中引入的,它和StringBuffer的用法完全相同,只是它没有被synchronzied修饰,因此在单线程环境下,会比StringBuffer效率要高;

StringBuffer部分源码

@Override
public synchronized StringBuffer append(char[] str, int offset, int len) {
    toStringCache = null;
    super.append(str, offset, len);
    return this;
}


@Override
public synchronized StringBuffer append(boolean b) {
    toStringCache = null;
    super.append(b);
    return this;
}


@Override
public synchronized StringBuffer append(char c) {
    toStringCache = null;
    super.append(c);
    return this;
}


@Override
public synchronized StringBuffer append(int i) {
    toStringCache = null;
    super.append(i);
    return this;
}

StringBuilder部分源码

@Override
public StringBuilder append(Object obj) {
    return append(String.valueOf(obj));
}

@Override
public StringBuilder append(String str) {
    super.append(str);
    return this;
}

四、请说出下面程序的输出

String对象的intern()方法会得到字符串对象在常量池中对应版本的引用(如果常量池中有一个字符串与String对象的equals结果是true),如果常量池中没有对应的字符串,则把该字符串添加到常量池中,然后返回常量池中字符串的引用。

五、JAVA中日期和时间

1、如何获取年月日、小时分钟秒?

JAVA的数据类型

一、java基本数据类型都有哪些,各占几个字节?

四类

八种

字节数

数据表示范围

整型

byte

1

-128~127

short

2

-32768~32767

int

4

-2147483648~2147483647

long

8

-2^63~2^63-1

浮点型

float

4

-3.403E38~3.403E38

double

8

-1.798E308~1.798E308

字符型

char

2

表示一个字符,如('a','A','0','我')等

布尔型

boolean

1

true、false

二、String是基本类型吗?

String是引用类型,底层用char数组实现的。

private final char value[];

三、short s1=1;s1=s1+1;有错吗?short s1=1;s1+=1;有错吗?

前者不正确,后者正确。

由于s1是short类型,1是int,所以运算结果也是int,要把结果赋值给short就要做类型转换;而s1+=1中,相当于(short)(s1+1),隐含着类型转换。

四、int和Integer有什么区别?

int的包装类型就是Integer,从java5开始,引入了自动装箱和拆箱,是二者可以自动转换。

基本类型:byte、short、int、long、float、double、char、boolean

包装类型:Byte、Short、Integer、Long、Float、Double、Character、Boolean

五、下面题目输出结果是什么?

答:

true

false

由于Integer是一个对象,==在对象中对比的是对象的引用。Integer在给对象赋int值时,调用的是valueOf方法

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

IntegerCache是Integer的一个内部类

private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer cache[];


    static {
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
            sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
            try {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
            } catch( NumberFormatException nfe) {
                // If the property cannot be parsed into an int, ignore it.
            }
        }
        high = h;


        cache = new Integer[(high - low) + 1];
        int j = low;
        for(int k = 0; k < cache.length; k++)
            cache[k] = new Integer(j++);


        // range [-128, 127] must be interned (JLS7 5.1.7)
        assert IntegerCache.high >= 127;
    }


    private IntegerCache() {}
}

由源码可以看出,Integer赋值时,如果值在-128~127之前,是直接使用静态代码块生成的int值,不会额外new一个Integer对象,而超过了这个范围,就要重新new一个对象,所以f1==f2的结果是true,f3==f4的结果是false。

六、String类常用方法

七、数据类型之间的转换

字符串向基本数据类型转换:使用parseXXX(String)方法或者valueOf(String)方法即可返回对应基本类型;

基本数据类型向字符串转换:一种是使用+“”(连接一个空字符传),或者使用String.valueOf()方法返回字符串;

JAVA中的IO

一、JAVA中有几种类型的流?

二、字节流如何转换为字符流

字节输入流转字符输入流通过InputStreamReader实现,该类构造函数可以传入InputStream对象。

字节输出流转字符输出流通过OutputStreamWriter实现,该类构造函数可以传入OutputStream对象。

三、字节流和字符流的区别

字节流读取的时候,读到一个字节就返回一个字节;字符流使用了字节流读到一个或多个字节(中文对应的字节数是2个,在UTF-8码表中是3个字节)时,先去差指定的编码表,将查到的字符返回。字节流可以处理所有类型数据,如:图片、MP3、AVI视频文件等,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。字节流主要是操作byte类型数据,以byte数组为准,主要操作类就是OutputStream、InputStream。

字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的unicodde字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点儿,如果是关系到中文(文本)的,用字符流好点儿。在程序中一个字符等于两个字节,java提供了Reader、Writer两个专门操作字符流的类。

四、什么是java的序列化,如何实现java序列化?

序列化就是一种用来处理对象六的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输与网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:间需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,实现该接口只是为了标注对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputSteam(对象流)对象,接着,使用对象流对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存期状态),要恢复的话则用输入流。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐