Java数据类型面试题

1、String是最基本的数据类型吗?
答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),剩下的都是引用类型(reference type),枚举类型(enumeration type)也是引用类型。


2、byte b1=3, b2=4 , b; b=b1+b2; b=3+4;哪句是编译失败的呢?为什么呢?
答:b=b1+b2;编译失败:byte,short,char之间相互不转换,一旦进行运算,默认提升一个int类变量相加,是先看数据类型,最终相加后的结果是否在当前这个类型范围之内。应当把者一步改为b=(byte)b1+b2。


3、short s1=1; s1=s1+1;有什么错?short s1=1; s1+=1;有什么错?
答:对于short s1=1;s1=s1+1;来说,在s1+1运算时会自动提升表达式的类型为int,那么将int赋予给short类型的变量s1会出现类型转换错误。应该改为short s1=1;s1=(short)s1+1;
对于short s1=1;s1+=1;来说 +=是Java语言规定的运算符,Java编译器会对它进行特殊处理,因此可以正确编译。


4、byte a=127; a+=5; System.out.println(a);请问输出结果是什么?
答:-124。首先byte取值范围-128~127当a+=1时此时已经是超出了byte的临界值,此时输出的为-128,a+=2时输出为-127,以此类推a+=5时输出为-124。


5、int a=1;int b=2;不借用第三个变量的情况下,怎么让a,b值交换?
答:a = ab;b=ab;a=a^b;

public static void main(String[] args) {
		int a=5;
		int b = 8;
		a=a^b; //101^1000=1101---13
		b=a^b;//1101^1000=0101---5
		a=a^b;//1101^0101=1000---8
		System.out.println(a);
		System.out.println(b);
		/*
		 * 0 ^ 1 得 1 
                   1 ^ 1 得 0 
                   0 ^ 0 得 0 
                   1 ^ 0 得 1
		 */
	}

6、float 发=3.4;是否正确?
答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型会造成精度丢失,因此需要强制类型转换 float f = (float)3.4;或者写成float f = 3.4F;。


7、Integer和int的区别
答:int 是Java的八种基本数据类型之一。Integer是Java为int类型提供的封装类。int变量的默认值为0,Integer变量的默认值为null,这一点说明Integer可以区分出未赋值和值为0的区别,比如说一名学生没来参加考试,另一名学生参加考试全答错了,那么第一名考生的成绩应该是null,第二名考生的成绩应该是0分。


8、char类型变量能不能储存一个中文的汉字,为什么?
答:char类型变量是用来储存Unicode编码的字符的,unicode字符集包含了汉字,所以char类型当然可以存储汉字的。如果某个生僻字没有包含在Unicode编码字符集中,那么char就不能存储该生僻字。


9、switch语句能否作用在byte上,能否作用在long上,能否作用在string?
答:在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量,
整数表达式可以是int基本类型或Integer包装类型。

由于,byte,short,char都可以隐式转换为int,所以,这些类型以及这些类型的包装类型也是可以的。

long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,
所以,它们不能作用于swtich语句中。

不过,在1.7版本之后switch就可以作用在string上了。


10、Java中3*0.1 == 0.3将会返回什么?true还是false?
答:false,因为浮点数不能完全精确的表示出来,一般都会损失精度。

有事评论区留言,也欢迎一起学习的伙伴
原文地址:https://www.cnblogs.com/wt9866/p/13619752.html