java基础面试题1

本文深入探讨了Java编程中的关键技巧,包括goto关键字的理解、不使用临时变量交换两个整数的值、多重嵌套循环的跳出方法、==与equals的区别、short类型运算的注意事项、final关键字的作用以及static方法调用限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.java语言中有没有goto关键字?  

goto是java语言中的保留字,目前还没有在java中使用。goto这个词是C语言中的,goto语句通常与条件语句配合使用,可用来实现条件转移, 构成循环,跳出循环体等功能。而在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。但是在java语言中,goto这个词只是作为了保留字,还没有使用。那是因为java语言讲究简单,方便。


2.对两个整数变量进行互换,要求在不使用第三方变量的前提下?

在这里我把思考的过程和演算的过程都写下,面试的时候,你们只需要写下最终
的结果就可以了。
     1,我们知道一个数异或另一个数2次,结果还是这个数。举例:2^3^3=2.这个
大家明白吧,应该没问题.同样,3^2^3=2,其实我只是把顺序换了下位置,这个都不难理解.
     2, 题目中不是说两个整数变量吗?那么我们就设两个整数变量.比如: int x = 2; int y = 3;现在我们就把这两个数用异或的方法进行数值
换位.
     3,由于我们人的思想习惯是xy的顺序,那么我们就先来换位x,于是有:
         x = x^y;//此时x=2^3.这时再算出y,于是有
         y = x^y;//相当于2^3^3=2,这时的y=2,我们完成了一个换位.于是开始换x.
        此时x^y=2^3^2=3,那么我们就把这个值赋给x,那么就是
         x = x^y;//相当于2^3^2=3.这时x=3;


3.在JAVA中如何跳出当前的多重嵌套循环?

在java中,要想跳出多重循环,可以在外循环语句前面定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,这样就可以跳出外层循环了,普通的情况下break跳出当前循环。

A:for(int i=0; i<10; i++){       //外循环定义标号A.
               for(int j=0; j<10; j++){
                      System.out.println("i="+i+",j="+j);

                      if(j==6){
                              break A; //break A,就是跳到外循环处(也就是整个外循环都结束了).   
                     }
               }
   }

4."=="和equals方法究竟有什么区别?

答案:对于比较基本数据类型来说,==比较的就是数值的大小,例如:
  int m = 2;
  int n = 3;
  boolean b = m==n;
  System.out.println(b);//结果为false,因为2和3不等吗.
        但是对于引用类型数据来说,==和equals就有些不同了,在大多数类中的equals方法调用的依然是==,但比较的是两个引用变量的地址是否相同.
  例如:
  int[] arr1 = {1,2,3};
  int[] arr2 = {1,2,3};
  System.out.println(arr1==arr2);//结果是false,因为比较的是地址值.
  System.out.println(arr1.equals(arr2));//结果还是false,因为比较的还是地址值.其实调用的方法还是"=="
        但是在字符串String中就不一样了,因为String中的equals方法被重写了,它比较的是两个字符串对象中的内容是否相同.
  例如:
  String s1 = new String("abc");
  String s2 = new String("abc");
  System.out.println(s1==s2);//结果是false,因为比较的是地址值.
  System.out.println(s1.equals(s2));//结果是true,因为比较的是对象中内容是否相同.


5.short s1 = 1;  s1 = s1 + 1;有什么错?short s1 = 1;  s1 += 1;有什么错?  

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型(byte,short,char 这三种类型在参与运算时,会自动转换成int类型),所以最后的结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误(因为int类型转换成short类型可能会损失精度,计算机只要认为可能出错,这哥们就会提示给我们,它还是比较尽职的)。
      对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,也就是类型自动提升,因此可以正确编译。


6.使用final关键字修饰一个变量时,是引用变量不能变,还是引用的对象的内容不能变?

final  StringBuffer  sb = new StringBuffer("Hello");
      sb = new StingBuffer("World");//这就是引用改变.sb指向了新的引用.
      sb.append("Itcast");//此时sb中的内容为 "HelloItcast",这就是对象改变了.
      那么在上面的代码中, 到底哪个是对的呢?
      sb.append("Itcast"); 这句代码是对的,可以编译通过. 而
       sb = new StingBuffer("World"); 这句代码会编译报错.
/*
  错误: 无法为最终变量sb分配值
  sb = new StringBuffer("World");
*/
 所以说,被final关键字修饰的变量,是引用变量不能变,但是引用变量的对象中的内容是可以改变的.

7.是否可以从一个static方法内部发出对非static方法的调用?

答案: 不可以调用,因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用.
static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部可以发出对非static方法的调用。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值