java基础(二)java基础常见面试题小总结(1)

  • 今天课程任务比较繁重,本来是想写一个简单地自动登录网页如何实现,但是今天没成功,然后想了想每天一篇博客的目标,准备再写点别的,我在上周总结的一丢丢小的面试知识点。
  • 在刚开始学java基础的时候,对运算符那块记忆颇深,所以今天的第一个题目是:

1、谈谈你对&和&&的理解?

  • (1)思路:在回答问题的时候,需要逻辑清晰,我们首先要答什么,然后在答什么,一定要有一个答题思路,在这道题中,首先它都属于java中的运算符,那么应该先理清他们的共同点,然后在说它们的区别;
    (2)回答:首先&和&&都是java中的逻辑运算符,表示逻辑与,当运算符两边的表达式结果都为true时,结果才会为true,否则只要有一方为false,那么结果就是false。
    各自的特点:
    ①:&&具有短路的功能,即如果第一个表达式的结果为false时,不再计算第二个表达式。
    ②:&可以用作位运算符,当其两边的表达式不是布尔类型时,&表示按位与操作。
    适当的举例:
    ③:短路与(&&)举例:
    对于if(str!=null&&!str.equals(“”))表达式,当str为null时,后面的表达式不会执行,也就不会出现空指针异常,如果将&&改为&,则会抛出空指针异常,

  • 曾经在培训时考试遇到这样一道题:

public class Test {
	public static void main(String[] args) {
		int a = 12, b = 20;
		if (a++ == 13 && ++b == 21) {
			System.out.println("ok");
		}
		System.out.println("a=" + a);
		System.out.println("b=" + b);
	}
}

当时班里好多小白错了,这道题除了考察&&运算符外还有对自加自减的考察,
分析如下:初始化a=12,b=20;在if条件中a是先执行在自加,12与13不等,所以&&前面的表达式结果为false,此时a自加为13,因为&&具有短路与的功能,所以后面的表达式不执行,整个条件的结果为flase,所以if条件体中的代码不执行,这个题的结果为:a=13,b=20

  • 第二个题目是如何跳出循环,我们在用到循环时可能没有特意的去思考过这个问题,想到时无法正确表述。

2 、在java中如何跳出当前的多重嵌套循环?

(1)第一种方式:在外层循环语句前定义一个标号,在里层循环体代码中,使用带有标号的break语句,就可以跳出外层循环。
eg:

package com.qiao.day3;

public class SkipIf {
	public static void main(String[] args) {
		ok: for (int i = 0; i < 10; i++) {
			for (int j = 0; j < 10; j++) {
				System.out.println("i=" + i + ",j=" + j);
				if (j == 5) {
					break ok;
				}
			}
		}
	}
}

将这个例子放到eclipse中运行
若没有这个标志位,代码如下:

package com.qiao.day3;

public class SkipIf {
	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
			for (int j = 0; j < 10; j++) {
				System.out.println("i=" + i + ",j=" + j);
				if (j == 5) {
					break;
				}
			}
		}
	}
}

结果应该是执行到i=9是才算完成,添加了这个ok标志位后,运行结果就变成了:
标志位存在运行结果
但我们并不频繁的使用第一种方式,那就看看第二种跳出循环的方式。
(2)第二种方式:在代码中要能让外层循环条件表达式得结果受到内层循环体代码的控制,例如要在二维数组查找某个数字,代码如下:

package com.qiao.day3;

public class SecondSkipIf {
	public static void main(String[] args) {
		int arr[][] = { { 1, 2, 3 }, { 4, 5, 6, 7 }, { 9 } };
		boolean found = false;
		for (int i = 0; i < arr.length && !found; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.println("i=" + i + ",j=" + j);
		*:		if (arr[i][j] == 5) {
					found = true;
					break;
				}
			}
		}
	}
}
  • 在看到这个例子的时候,我一时间没能想起来二维数组,经过理解:
    (1)这是一个二维数组的静态初始化,arr.length结果为3,arr[0].length结果为3,标注*哪行代码的意思是,在i行j列结果为5时跳出循环。
    (2) 我做了这样一个测试,将found置为true这行代码注释掉,发现结果会多出一行,到数字9的位置。
    (3)在第一个if中,&&为并且的意思,两个条件都为true时,循环语句才会执行,将found置为true,则外循环体直接不执行,跳出循环。
    (4)说到这个,我们老师在介绍二维数组时,举了一个。。。呃三观不是很正的例子,假设你对象出轨了,你要去酒店找你对象,你肯定是需要先知道在几层,然后才能去找具体的房间号吧,所以二维数组就是这样一个情况,a[i][j],i代表层数,j呢就代表房间号。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值