往期文章
日常_JAVA_面试宝典多线程2(含答案)
第一章:日常_JAVA_面试题集1(含答案)
第二章:日常_JAVA_面试题集2(含答案)
第九章:日常_JAVA_面试题集9(含答案)
第十章:日常_JAVA_面试题集10(含答案)
往期文章大全……
前言
作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。
——王文峯
提示:以下是本篇文章正文内容
66、short s = 1; s = s + 1;有什么错?
short s = 1; s += 1;有什么错?
对于short s = 1; s = s + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
67、char型变量中能不能存贮一个中文汉字?为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
备注:后面一部分回答虽然不是在正面回答题目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,做到知无不言,言无不尽。
68、用最有效率的方法算出2乘以8等于几?
最有效率的计算方式:int result = 2 << 3;
因为将一个数左移n位(二进制移位运算),就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算是cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。
69、冒泡排序的实现?
口诀:n个数字来比较,外层循环N-1,内层循环N-1-i,两两相比小靠前。
代码示例:
public static void main(String[] args) {
int[] number=new int[]{
22,12,33,45,66};
int temp;
//冒泡排序
for(int i=0;i<number.length-1;i++){
for(int j=0;j<number.length-1-i;j++){
if(number[j]>number[j+1]){
temp=number[j+1];
number[j+1]=number[j];
number[j]=temp;
}
}
}
}
70、"=="和equals方法究竟有什么区别?
(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚)
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用 == 操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();引用变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用== 操作符进行比较。
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
String a=new String("foo");
String b=new String("foo");
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a == b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = new String(“quit”); input.equals(“quit”),许多人稍不注意就使用 == 进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都是使用equals方法。
如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,
Object类的equals方法的实现代码如下:
boolean equals(Object o){
return this==o;
}
这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用== 操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用 ==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须重写equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
总结
以上就是今天的内容,本文仅仅简单介绍了几个面试题,关注我,每天五道面试题。
转载:https://blog.csdn.net/Feng_wwf/article/details/108579296