Java基础知识总结-1

这里基于Java的基础知识列举一些题目,这些题目比较考验基本功是否扎实。同样这些有可能作为职场面试题出现,所有大家可以好好看看。

一、变量与运算符

问题1:float和long表示的数据范围,谁大?

问题2:以下代码中,是否有错误?为什么错误?

byte b1 = 2;
byte b2 = b1 + 128;
byte b3 = 128;

char c1 = 'a';
short s1 = 10;
char c2  = c1 + s1;

问题3:以下代码的结果,是什么?

char c1 = 'a';
int i1 = c1 + 10;
System.out.println(i4);

int i2 = 128;
byte b = (byte)i2;
System.out.println(b);

char c = 'a';
int num = 10;
String str = "hello";
System.out.println(c + num + str);
System.out.println(c + str + num);
System.out.println(c + (num + str));
System.out.println(str + num + c);

int m = 2;
int n = 3;
n *= m++;
System.out.println("m=" + m);
System.out.println("n=" + n);

int n1 = 10;
n1 += (n1++) + (++n1);
System.out.println(n1);

问题4:如何最快算出2*8的结果?

二、程序流程控制

问题5:以下代码的结果,是什么?

int c = 5;
switch(c){
    default:
        System.out.println("a");
    case 4:
        System.out.println("b");
    case 3:
        System.out.println("c");
        break;
    case 2:
        System.out.println("d");
    case 1:
        System.out.println("e");
}

三、数组

问题6:以下代码是否有错误?

int[] arr1 = {1,2,3};
int arr2[] = new int[]{1,2,3};
int[] arr3 = new int[3]{1,2,3};

int[][] arr4 = new int[3][];
System.out.println(arr4[0]);//null
System.out.println(arr4[0][0]);//报java.lang.NullPointerException

问题7:以下代码的结果,是什么?

int[] arr1 = {};
System.out.println(arr1.length);
System.out.println(arr1);
		
int[] arr2= new int[5];
System.out.println(arr2[3]);
System.out.println(arr2);

char[] c = new char[5];
System.out.println(c);
char[] c1 = new char[]{'a','b','c'};
System.out.println(c1);

int[][] arr = new int[3][4];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[0][0]);

答案

  • 问题1:float和long,谁表示的数据范围更大?
数据类型字节
long8
float4

为什么8位字节long的数据范围会比4位字节float的数据范围小呢?
long:2^63-1;float : 3.4x10^38 > 2x10^38 > 2x8^38
可得:2x8^38 = 2x2338 = 2x2^114
因为:2x2^114 > 2^63-1
所以:float的数据范围大于long的数据范围

关于两者内存存储,可以参考文章:https://blog.csdn.net/weixin_42518062/article/details/85046071

  • 问题2:以下代码中,是否有错误?为什么错误?
byte b1 = 2;
byte b2 = b1 + 128;//编译报错,因为运算后类型会自动提升
byte b3 = 128;//编译报错,因为范围溢出

char c1 = 'a';
short s1 = 10;
char c2  = c1 + s1;//编译报错,因为运算后类型会自动提升
  • 问题3:以下代码的结果,是什么?
char c1 = 'a';
int i1 = c1 + 10;
System.out.println(i4);
//字符'a'代表97,加10,得107

int i2 = 128;
byte b = (byte)i2;
System.out.println(b);
//精度损失,-128

char c = 'a';
int num = 10;
String str = "hello";
System.out.println(c + num + str);//107hello
System.out.println(c + str + num);//ahello10
System.out.println(c + (num + str));//a10hello
System.out.println(str + num + c);//hello10a
//String可以和8种基本数据类型变量做运算,且运算只能是连接运算

int m = 2;
int n = 3;
n *= m++; //n = n * m++;	
System.out.println("m=" + m);//3
System.out.println("n=" + n);//6

int n1 = 10;
n1 += (n1++) + (++n1);//n1 = n1 + (n1++) + (++n1);
System.out.println(n1);//10+10+12=32

问题4:如何最快算出2*8的结果?

通过位运算
2<<<3  或者  8<<1,两种最高效O(1)

问题5:以下代码的结果,是什么?

int c = 5;
switch(c){
    default:
        System.out.println("a");
    case 4:
        System.out.println("b");
    case 3:
        System.out.println("c");
        break;
    case 2:
        System.out.println("d");
    case 1:
        System.out.println("e");
}
//打印abc

问题6:以下代码是否有错误?

int[] arr1 = {1,2,3};//正确,类型推断
int arr2[] = new int[]{1,2,3};//正确,声明 + 初始化 + 赋值
int[] arr3 = new int[3]{1,2,3};//没有这样的语法

int[][] arr4 = new int[3][];
System.out.println(arr4[0]);//打印null
System.out.println(arr4[0][0]);//报错java.lang.NullPointerException

问题7:以下代码的结果,是什么?

int[] arr1 = {};
System.out.println(arr1.length);//打印0
System.out.println(arr1);//打印对象的地址值[I@7d6f77cc

int[] arr2= new int[5];
System.out.println(arr2[3]); //a[3]的默认值为0
System.out.println(arr2); //打印对象的地址值[I@5aaa6d82

char[] c = new char[5];
System.out.println(c); //打印的不是地址值,而是值,5个空格。
char[] c1 = new char[]{'a','b','c'};
System.out.println(c1); //abc
//这是因为println()重载方法的结果是不同的

int[][] arr = new int[3][4];
System.out.println(arr);//打印地址值[[I@5aaa6d82
System.out.println(arr[0]);//打印地址值[I@73a28541
System.out.println(arr[0][0]);//打印int默认值0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值