String是基本的数据类型吗?
答:String不是基本数据类型,而是一个类(class),是Java编程语言中的字符串。String对象是char的有序集合,并且该值是不可变的。因为java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。
Java的8大基本数据类型分别是:
-
整数类 byte, short, int, long
-
浮点类 double, float
-
逻辑类 boolean
-
文本类 char
此外需要说明的是,有的文章中把void也算是一种基本的数据类型。
基本类型存储在栈中,因此它们的存取速度要快于存储在堆中的对应包装类的实例对象,从Java5.0(1.5)开始,JAVA虚拟机(Java Virtual Machine)可以完成基本类型和它们对应包装类之间的自动转换。因此我们在赋值、参数传递以及数学运算的时候像使用基本类型一样使用它们的包装类,但这并不意味着你可以通过基本类型调用它们的包装类才具有的方法。另外,所有基本类型(包括void)的包装类都使用了final修饰,因此我们无法继承它们扩展新的类,也无法重写它们的任何方法。
-
基本类型的优势:数据存储相对简单,运算效率比较高。
-
包装类的优势:自带方法丰富,集合的元素必须是对象类型,体现了Java一切皆是对象的思想。
常见面试题:
- 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+=1来说,+=是java语言规定的运算符,Java编译器会对它进行特殊处理,因此可以正确编译。
- char类型变量能不能储存一个中文的汉子,为什么?
答:char类型变量是用来储存Unicode编码的字符的,unicode字符集包含了汉字,所以char类型当然可以存储汉字的,还有一种特殊情况就是某个生僻字没有包含在unicode编码字符集中,那么就char类型就不能存储该生僻字。补充说明,Unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
- Integer和int的区别
int是java的8种内置的原始数据类型。Java为每个原始类型都提供了一个封装类,Integer就是int的封装类。int变量的默认值为0,Integer变量的默认值为null,这一点说明Integer可以区分出未赋值和值为0的区别,比如说一名学生没来参加考试,另一名学生参加考试全答错了,那么第一名考生的成绩应该是null,第二名考生的成绩应该是0分。关于这一点Integer应用很大的。Integer类内提供了一些关于整数操作的一些方法,例如上文用到的表示整数的最大值和最小值。
- switch语句能否作用在byte上,能否作用在long上,能否作用在string上?
答:byte的存储范围小于int,可以向int类型进行隐式转换,所以switch可以作用在byte上。long的存储范围大于int,不能向int进行隐式转换,只能强制转换,所以switch不可以作用在long上。string在1.7版本之前不可以,1.7版本之后switch就可以作用在string上了。
- Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
答:Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应。例如,ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,Math.ceil(11.6)的结果为11,Math.ceil(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
- 下面的代码有什么不妥之处?
(1)
if(username.equals(“zxx”){
}
username可能为null,会报空指针错误;改为"zxx".equals(username)
(2)
int x = 1;
return x==1?true:false;
这个改成return x==1;就可以
网友评论