关闭

Java 面试中你最易忽略9道的程序题

标签: Java面试程序
323人阅读 评论(0) 收藏 举报
分类:

1.理解int型取值范围

public class INTVALUE {
    public static void main(String[] args) {
        long max = Integer.MAX_VALUE + 1;
        long min = Integer.MIN_VALUE - 1;
        System.out.println("int型最大值加1:"+max);
        System.out.println("int型最小值减1:"+min);
    }
}

程序运行结果:
int型最大值加1:-2147483648
int型最小值减1:2147483647
可以发现最大值加上1,结果变成了最小值;当最小值减去1,结果变成了最大值;以上情况就是数据类型的溢出。

2.得到精确结果

public class Rigorous {
    public static void main(String[] args) {
        double d = 10.00;
        double f = 9.30;
        System.out.println(d-f);
    }
}

结果不是0.7哟,而是0.6999999999999993
要想得到准确的结果可以使用BigDecimal类

import java.math.BigDecimal;

public class BigDecimalDemo {
    public static void main(String[] args) {
        BigDecimal d = new BigDecimal("10.0");
        BigDecimal f = new BigDecimal("9.3");
        BigDecimal sub = d.subtract(f);
        double ret = sub.doubleValue();
        System.out.println(ret);
    }
}

此时结果为0.7,但是此方法复杂且运行速度慢。

public class SwitchLong {
    public static void main(String[] args) {
        double d = 10.00 ;
        double f = 9.30 ;
        long d1 = (long) (d*100);
        long f1 = (long) (f*100);
        double ret = (d1-f1)/100.0;
        System.out.println(ret);
    }
}

答案同样是0.7,此方法是先将浮点型转换为整型计算后,再将整型转换为浮点型。

3.请写出以下代码运行结果

public class LongDemo {
    public static void main(String[] args) {
        long l = 2147283640 * 10;
        System.out.println(l);
    }
}

答案是-2000080 而不是 21472836400 。这是因为在
long l = 2147283640 * 10; 中2147283640还在int型的取值范围内,所以不加L是不会出编译错误的,但*10后的结果早早就超出了int型的取值范围,造成了数据类型的溢出。以后要声明一个long型变量,最好在其值后加上L。

4.关于if语句

public class TestIf {
    public static void main(String[] args) {
        int a=3,b=4,c=7;
        if (a+b>c) 
            if(++a==b)
                System.out.println(++a);
            else 
                System.out.println(a++);
    }
}

答案是没有任何输出,这是因为if(a+b>c) //a+b>c返回的是false,所以后面的所有语句都不会执行。

public class TestIf2 {
    public static void main(String[] args) {
        int i=1;
        double j=1.0;
        float k=1.0f;
        if (i==j && i==k && j==k) {
            System.out.println("i=j=k");
        }
    }
}

输出结果i=j=k.对于基本数据类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。

5.使用foreach循环输出时的注意事项

public class TestForEach {
    public static void main(String[] args) {
        String language[] = new String[] {"aaaa","bbbb","cccc","dddd"};
        for (String lang : language) {
            lang = "abcd";
        }
        for (String lang : language) {
            System.out.print(lang+"   ");
        }
    }
}

程序输出结果:aaaa bbbb cccc dddd
使用foreach语句循环时,不能通过循环变量来改变数组或者集合元素的值。

6.形参个数可变的方法

public class ChangeArgs {
    public static void main(String[] args) {
        System.out.println("传入一个参数:");
        print("Java");
        System.out.println("\n传入两个参数:");
        print("Java","C");
        System.out.println("\n传入三个参数:");
        print("Java","C","C++");
    }
    //定义可变参数的方法
    public static void print(String ... str){
        for (String string : str) {
            System.out.print(string+"   ");
        }
    }
}

程序结果:
传入一个参数:
Java
传入两个参数:
Java C
传入三个参数:
Java C C++
在JDK1.5之后Java语言提供一个新的概念——可变参数。可变参数是允许为方法指定不再固定数目的参数,可以根据需要传入多个参数。

7.关于字符串

public class TestString {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "World";
        String str3 = "HelloWorld";
        //str1+str2 两个变量相加,相当于
//(newStringBuilder(String.valueOf(s1))).append(s2).toString();
        //运行时会有新的地址空间的分配。为false
        System.out.println(str3==str1+str2);
        //和上面是相同的原理,会有新的地址空间的分配
        System.out.println(str3==str1+"World");
        //+两边都是字符串常量,Java系统先把两个字符串拼接起来,
        //然后到常量池中去找是否有相同内容的字符串
        //上面str3内容即为HelloWorld,找到后就把str3的地址返回。结果为true。
        System.out.println(str3=="Hello"+"World");
    }
}

8.静态成员的调用
下面两个程序可以编译并运行的是

public class TestStatic01 {

    public static int add(int x){
        int y;
        if(x>0){
            y=10;
        }
        return x+y;
    }
    public static void main(String[] args) {
        System.out.println(add(5));
    }
}
public class TestStatic02 {

    public static int add(int x){
        int y;
        if(x>0){
            y=10;
        }else {
            y=0;
        }
        return x+y;
    }
    public static void main(String[] args) {
        System.out.println(add(5));
    }
}

第一个在编译时会报错,局部变量必须经过初始化后才能使用,第二个程序y在使用前已经确保会被初始化。

9.普通代码块
下面代码能够正常编译?

public class CodeBlock {

    public static void main(String[] args) {
        int x=5;
        System.out.println(x);
        {
            int x=3;
            System.out.println(x);
        }

    }
}

直接在一个方法或语句中出现的{ }就称为普通代码块。
此程序中代码块是在main()方法的作用域内定义的,在同一个作用域中,一个变量只能定义一次。

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

身为一名Java程序员,在面试的时候常常被问到的,下面我总结一些常常别问到的问题。

身为一名Java程序员,在面试的时候常常被问到的,下面我总结一些常常别问到的问题。 1.HashMap和Hashtable之间的区别   经常问到。这两个都是Map...
  • u012130609
  • u012130609
  • 2014-09-26 20:32
  • 5740

【Quant】80+面试,5个offer,Quant大神总结分享各家quant面试题

【Why Quant? 】 在北美,这个工作基本上是理工科的中国学生进入金融领域最主要的渠道。而且,现在国内也有朝这方面发展的趋势。如果你是理工科背景,或者对数理,编程和金融比较感兴趣,不妨尝试...
  • robinjwong
  • robinjwong
  • 2015-01-14 13:41
  • 3789

2017 Java 工程师面试总结

面试的岗位是Java后台开发,面的公司不多,主要有美团点评-网易-网易有道-携程-华为-中兴-科大讯飞-烽火通信这些公司。从前到后简单记录了自己面试时候遇到的问题,以及对面试给了一点点小的建议,给明年...
  • u013322876
  • u013322876
  • 2017-04-03 17:22
  • 6229

java面试程序题收集

java面试程序题收集 Java面试J#算法1.写一个方法,用一个for循环打印九九乘法表Java代码 /**    * 打印九九乘法口诀表    */   public void ...
  • xuyuxin8145
  • xuyuxin8145
  • 2011-07-27 18:28
  • 1490

Java 笔试基础(一)

1.第一题(观察打印效果) public class StringDemo { public static void main(String[] args) { //s1...
  • Jession_Ding
  • Jession_Ding
  • 2017-03-03 22:29
  • 147

常见面试程序题

1、 给定排好序的数组A(从小到大),大小为n,现在给定数X,插入到给定的数组A中,保持排序(二分法)。
  • zhonghua18517
  • zhonghua18517
  • 2014-08-08 21:19
  • 535

面试:最易被忽略的12种高级错误

  • 2008-10-22 11:37
  • 5KB
  • 下载

百度前端面试经验之程序题

整理百度前端的面试经验
  • u014607184
  • u014607184
  • 2016-09-24 11:02
  • 474

C/C++面试程序题(一)——字符串反转、链表反转的递归、非递归实现

一、用递归方式、非递归方式写函数将一个字符串反转。      非递归方式:   这个是比较简单啦,注意到一半就得停住   char* reverse(char *str){ if(s...
  • fansongy
  • fansongy
  • 2011-10-11 15:58
  • 8085

程序员软件研发岗位笔试面试经典程序题

  • 2012-11-29 21:22
  • 176KB
  • 下载
    个人资料
    • 访问:1734次
    • 积分:311
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条