Java笔试、面试中常见的题目记录

1、floor()  ceil()   round()函数比较

三个函数都是java.lang.Math类的静态函数

static double floor(double a)
Returns the largest (closest to positive infinity)  double value that is less than or equal to the argument and is equal to a mathematical integer.
static double ceil(double a)
Returns the smallest (closest to negative infinity)  double value that is greater than or equal to the argument and is equal to a mathematical integer.
static long round(double a)
Returns the closest  long to the argument, with ties rounding to positive infinity.
static int round(float a)
Returns the closest  int to the argument, with ties rounding to positive infinity.



上边是摘自javadoc里的,

floor为地板之意,一个数的“地板”也就是不大于这个数的最大整数,依据doc,函数返回的是double类型,所以要整数后边加个小数点和0

		System.out.println(Math.floor(12.5));
		System.out.println(Math.floor(-12.5));
		System.out.println(Math.floor(12));

输出结果:

12.0
-13.0
12.0

ceil有天花板之意,一个数的“天花板”就是不小于这个数的最小整数,返回是double类型

		System.out.println(Math.ceil(12.5));
		System.out.println(Math.ceil(-12.5));
		System.out.println(Math.ceil(12));

输出结果:

13.0
-12.0
12.0

而round就是取数的四舍五入值,返回为整形值

		System.out.println(Math.round(12.5));
		System.out.println(Math.round(12.4));
		System.out.println(Math.round(-12.5));
		System.out.println(Math.round(-12.4));

输出结果:

13
12
-12
-12

注意负数的四舍五入,

System.out.println(Math.round(-12.5));
结果为-12,

System.out.println(Math.round(-12.6));

结果为-13,这是从数轴来看,-12.6是从-13向右0.4,故为-13.而-12.5是从-13向右0.5,故为-12

2、Integer int之间的比较

		Integer in1=new Integer(10);
		Integer in2=new Integer(10);
		Integer in3=10;
		Integer in4=10;
		int in5=10;
Integer与int之间比较:
		System.out.println(in1==in5);
		System.out.println(in1.equals(in5));
结果:true true

Integer之间的比较:

		System.out.println(in1==in2);
		System.out.println(in1==in3);
		System.out.println(in3==in4);
结果为:false,false,true。因为==之间比较的是地址,in1,in2地址不同,in3,in4地址相同,指向整形常量10.

3、-0.0与0.0和0的比较

	public static void main(String[] args){
	
	
		if(-0==0){
			System.out.println("Yes");
		}
		if(-0.0==0.0){
			System.out.println("Yes");
		}
		if(-0.0==0){
			System.out.println("Yes");
		}
	} 
输出 Yes Yes Yes。不知道谁想出的无聊的题目。。。。

4、indexOf方法

indexOf()方法是java.lang.String类中的方法,查找字符串的子字符串是否存在,如果存在,返回第一个字符出现的位置;否,返回-1

		String s="abcdef";
		System.out.println(s.indexOf("cd"));
		System.out.println(s.indexOf("cr"));
结果:2,-1

5、String字符串地址的比较

	public static void main(String[] args){
	
		String s1="abc";
		String s2="abc";
		System.out.println(s1==s2);//都指向常量字符串"abc",输出为true
		
		String s3=new String("abc");
		String s4=new String("abc");
		System.out.println(s3==s4);//new创建了两个字符串,在内存中有两个内存地址,false

		System.out.println(s1==s3);//一个常量字符串地址,一个new开辟的内存地址,false
		String s5=s1+s2;
		String s6=s1+s2;
		System.out.println(s5==s6);//false,原因待探究
		
		String s7="abc"+"def";
		String s8="abc"+"def";
		String s9="abcd"+"ef";
		System.out.println(s7==s8);//与常量字符串"abcdef"有关,返回为true
		System.out.println(s7==s9);//与常量字符串"abcdef"有关,返回为true
		
		String s10="abc"+new String("def");
		System.out.println(s7==s10);//false,有new创建,基本就是false
	
	} 

6、Calendar  Runtime哪个是单例模式

Runtime是单例模式

public static void main(String[] args){

		Calendar c1=Calendar.getInstance();
		Calendar c2=Calendar.getInstance();
		
		if(c1==c2){
			System.out.println("Clendar是单例模式!");
		}
		else
		{
			System.out.println("Calendar不是单例模式");
		}

		Runtime r1= Runtime.getRuntime();
		Runtime r2= Runtime.getRuntime();
		
		if(r1==r2){
			System.out.print("Runtime是单例模式!");
		}
	} 

输出结果:Calendar不是单例模式

Runtime是单例模式!

7、父类 子类中静态代码块  构造函数  代码块{}的执行顺序

子类+父类 static{} > 父类{} + 父类 constructor > 子类{}+子类constructor

class Father{
	public Father(){
		System.out.println("Father Constructor...");
	}
	
	{
		System.out.println("Father {} ");
	}
	
	static{
		System.out.println("Father Static...");
	}
}

class Son extends Father{
	public Son(){
		System.out.println("Son Constructor...");
	}
	
	{
		System.out.println("Son {} ");
	}
	
	static{
		System.out.println("Son Static...");
	}
}
public class Test {

	public static void main(String[] args){

		new  Son();
	} 
		
}
输出:

Father Static...
Son Static...
Father {} 
Father Constructor...
Son {} 
Son Constructor...

8、同步方法与同步代码块

在Java语言中,每一个对象都有一把锁,使用synchronized关键字可以获取对象上的锁,synchronized关键字可以加在方法级别(粗粒度)和代码块级别(细粒度)

同步代码块:synchronized(this){代码}

同步方法:public synchronized void fun(){代码}

9、Iterator和ListIterator的区别

a、Iterator可以遍历Set和List集合,而ListIterator只能遍历List集合

b、Iterator只能前向遍历,ListIterator可以双向遍历

c、ListIterator继承了Iterator接口,并包含了其他功能,比如增加元素,替换元素

Iterator的使用:

	@Test
	public void testIterator(){
		//泛型中不可以使用基本数据类型,只能使用封装类型
		List<Integer> list = new ArrayList<>();
		list.add(2);
		list.add(5);
		list.add(7);
		list.add(6);
		Iterator<Integer> it = list.iterator();
		//Iterator 的 hasNext()方法判断是否还有下一个数据
		while(it.hasNext()){
			//Iterator的next()可以返回Iterator对应的数据
			Integer i = it.next();
			System.out.println(i);
		}
	}
ListIterator的使用与Iterator相同,只不过多了一些可用的方法。

10.Array和ArrayList的区别


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值