每日五题-Java面试题220822


1、怎么将 byte转换为String?

可以使用 String 接收 byte[] 参数的构造器来进行转换,需要注意的点是要使用的正确编码,否则会使用品台默认编码,这个编码可能跟原来的编码相同,也可能不同。

2、Java 中怎样将 bytes 转换为 long 类型?

bytes[] 到数字类型的转换是个经常用到的代码,解决方式也不止一种。

Java代码实现
如果不想借助任何已经有的类,完全可以自己实现这段代码,如下:

 /**
     * 将字节数组转为 long
     * 如果 input 为 null,或 offset 指定的剩余数组长度不足 8 字节则抛出异常
     * @param input
     * @param offset 起始偏移量
     * @param littleEndian 输入数组是否小端模式
     * @return
     */
private static long longFrom8Bytes(byte[] input, int offset, Boolean littleEndian){
        long value = 0;
        // 循环读取每个字节通过位移运算完成 long 的 8 个字节拼装
        for (int count = 0; count < 8; count++) {
            int shift = (littleEndian?count:(7-count)) << 3;
            value |= ((long)0xff<< shift) &((long)input[offset+count]<<shift);
        }
        return value;
    }

借助 java.nio.ByteBUffer实现
java.nio.ByteBuffer 本身就有getLong.getInt,getFloat… …方法,只要将 byte[] 转换ByteBuffer就可以实现所有primitive类型的数据读取。

/**
 * 利用 {@link java.nio.ByteBuffer}实现byte[]转long
 * @param input
 * @param offset
 * @param littleEndian 输入数组是否小端模式
 * @return
 */
public static long bytesToLong(byte[] input, int offset, Boolean littleEndian){
    // byte[] 封装为 ByteBuffer
    ByteBuffer buffer = ByteBuffer.wrap(input,offset,8);
    if (littleEndian){
        // ByteBuffer.order(ByteOrder) 方法指定字节序,即大小端模式(BIG_ENDIAN/LITTLE_ENDIAN)
        // ByteBuffer 默认为大端(BIG_ENDIAN)模式
        buffer.order(ByteOrder.LITTLE_ENDIAN);
    }
    return buffer.getLong();
}

借助 java.io.DataInputStream实现

java.io.DataInputStream 同样提供了 readLong,readLong,readLong 方法,只要将byte[] 转换为 DataInputStream就可以实现所有primitive 类型的数据读取。

3、我们能将 int 强制转为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?

是的,我们可以做强制转换,但是 java 中 int 是32位的,而 byte 是 8位,所以如果强制转化是,int 类型的高24位将会被丢弃,byte类型的范围是从 -128到127。

4、存在两个类, B 继承 A, C继承B,我们能将 B转换为C么,如果 C = ©B;

这属于强制类型转换,如果被转换的B实例不是C类型,会有异常,比如你的 ABC 分别对应动物,猫,黑猫。

向上转型就是比如

C c = new C();

B b = c;

你把C 转型为B, 黑猫是猫吗?是啊,所以这是ok的。但是反过来

B b = new B();

C c = (C) b;

这就不ok 了,只知道这个b 是一只猫,它不一定是黑猫。但如果这个b 已经确定是一只黑猫了,那就可以转型了

B b = new C();

C c = (C) b;

这里的b本来就是黑猫。

5、哪个类包含 clone 方法? 是 Cloneable 还是 Object?

java.lang.Cloneable 是一个标示性接口,不包含任何方法,clone 方法在 object 类中定义。并且需要知道 clone() 方法是一个本地方法,这意味着它是由 C 或 C++ 或其他本地语言实现的。

源链接-掘金

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值