欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

牛客网面试宝典之JAVA基础知识总结

程序员文章站 2022-04-07 18:23:02
JAVA基础(一)● 请你比较一下Java和JavaSciprt?Java & JavaScript参考回答:Java 是一种半编译半解释的完全面向对象的程序设计语言;JavaScript 是解释性的基于对象的脚本语言Java 诞生于 Sun 公司,后背 Oracle 收购;JavaScript 是由 Netscape 网景公司开发Java源代码在执行前必须经过编译后才能执行;JavaScript是一种解释性编程语言,其源代码不需经过编译,由浏览器解释执行Java 采用强类型变...

JAVA基础(一)

● 请你比较一下Java和JavaSciprt?

Java & JavaScript

参考回答:

  • Java 是一种半编译半解释的完全面向对象的程序设计语言;JavaScript 是解释性的基于对象的脚本语言
  • Java 诞生于 Sun 公司,后背 Oracle 收购;JavaScript 是由 Netscape 网景公司开发
  • Java源代码在执行前必须经过编译后才能执行;JavaScript是一种解释性编程语言,其源代码不需经过编译,由浏览器解释执行
  • Java 采用强类型变量检查,即所有变量在编译之前必须作声明;JavaScript中变量是弱类型的,甚至在使用变量前可以不作声明,JavaScript的解释器在运行时检查推断其数据类型
  • 代码格式不一样。

扩展:为什么说 Java 是一种半解释半编译的程序设计语言呢?

什么是编译形语言,什么又是解释形语言

  • 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,就可以直接运行这个程序。执行速度快效率高,依靠编译器,跨平台性稍差
  • 解释型语言:把已经做好的源程序,翻译一句,执行一句,直到结束。执行速度慢效率低,依靠编译器,跨平台性稍好

那么为什么说Java 是编译型语言呢

第一个观点认为 Java 是编译型语言,因为Java程序想要运行,那么第一步就是要使用Javac进行编译。没有经过编译的**.java**文件,是没办法运行的!

那么为什么又说Java 是解释型语言呢

那么第二个观点则是认为Java是解释型语言,Java经过编译之后,仍然需要 JVM 的解释执行,Javac 将Java源文件编译成**.class文件,然后通过JVM**的解释执行!

综合上面两个观点来看,Java似乎既有编译型语言的特点,又有解释型语言的特点,也没有看到哪本权威的书籍上认定Java就是哪一种类型的语言。

● 请你讲讲&和&&的区别?

运算符

参考回答:

**&**运算符有两种用法:

  • (1)**&**按位与;

    • & 按位与底层操作的是二进制数,在JDK 集合源码中常见,例如 HashMap 底层 定位槽位的方式就是通过下面的公式实现:
      • (tab.length - 1) & hash:即,数组长度 - 1 按位与上 hash 值!
    • & 按位与操作两个数是如何实现的呢?我们来举一个简单实例:
    3 & 2 结果是多少呢?
        
    3 的二进制数表示为 b0010
    2 的二进制数表示为 b0001
        
    3 & 2   
    -----
    b0011 ---> 3
    &
    b0010 ---> 2
    -----
    b0010 ---> 2
        
    所以32的结果为2
    

    结论:& 按位与运算符是对两个整型操作数中对应位执行布尔代数,两个位都为1时输出1,否则0~

    如果位运算基础知识忘记了,给大家推荐一篇我的文章JAVA基础提高之位运算 !

  • (2)**&&**逻辑与;

    • **&&**运算符是短路与运算。
    • 逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true&&之所以称为短路运算是因为,==如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算==。很多时候我们可能都需要用**&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(""),二者的顺序不能交换,更不能用&**运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。

● int和Integer有什么区别?

数据类型

参考回答:

Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型,int 的包装类就是 Integer,从 Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
Java 为每个原始类型提供了包装类型:

  • 原始类型:boolean,char,byte,short,int,long,float,double
  • 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

如:

class AutoUnboxingTest {
  public static void main(String[] args) {
    Integer a = new Integer(3);
    Integer b = 3;                // 将3自动装箱成 Integer 类型
    int c = 3;
    System.out.println(a == b);   // false 两个引用没有引用同一对象
    System.out.println(a == c);   // true a 自动拆箱成 int 类型再和 c 比较
  }
}

扩展:Java 8 大基本对象(如果算上void 的话总共9种)

牛客网面试宝典之JAVA基础知识总结

9种基本数据类型和取值范围

基本类型 大小(位/bit) 字节数(byte) 最小值 最大值 默认值 包装器类型
boolean - - false true false Boolean
char 16 bits 2 bytes Unicode 0 Unicode 2^16-1 Character
byte 8 bits 1 byte -2^7 2^7-1 0 Byte
short 16 bits 2 bytes -2~15 2^15-1 0 Short
int 32 bits 4 bytes -2^31 2^31-1 0 Integer
long 64 bits 8 bytes -2^63 2^63-1 0 Long
float 32 bits 4 bytes 0.0 Fload
double 64 bits 8 bytes 0.0 Double
void - - - - - Void

注意:对于boolean值,在Java规范中并没有给出其储存大小,在《Java虚拟机规范》(参考我写的JVM总结通俗易懂的JVM虚拟机学习笔记还在更新中)给出了4个字节,和boolean数组1个字节的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。除了void之外,其他8种基本数据类型被称为八大基本数据类型

牛客网面试宝典之JAVA基础知识总结

图中从左向右的转换都是隐式转换,无需再代码中进行强制转换。从右向左均要进行强制类型转换,才能通过编译。强制转换会丢失精度,如:

//从左到右
byte i = 12;
System.out.println("byte:"+i);
short i2 = i;
System.out.println("short:"+i2);
char j = '²';
System.out.println("char:"+j);
int j3 = j;
System.out.println("int:"+j3);
long j4 = j;
/*
	输出结果:
	
    byte:12
    short:12
    char:²
    int:178
*/

//从右到左
double i = 178.33;
System.out.println("double:"+i);
float i1 = (float) i;
System.out.println("float:"+i1);
byte i5 = (byte) i;
System.out.println("byte:"+i5);
char i6 = (char) i;
System.out.println("char:"+i6);
/*
	输出结果:
	
    double:178.33
	float:178.33
    byte:-78
	char:²
*/

● 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,请你讲讲如何输出一个某种编码的字符串?

考察点:数据类型

参考回答:

 Public String translate (String str) {
    String tempStr = "";
 try {
    tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
    tempStr = tempStr.trim();
 }
 catch (Exception e) {
    System.err.println(e.getMessage());
 }
    return tempStr;
 }

● Java中的final关键字有哪些用法?

参考回答:

  • 修饰类:表示该类不能被继承;
  • 修饰方法:表示方法不能被重写;
  • 修饰变量:表示变量只能赋值一次且赋值以后值不能被修改(常量

● 请你说明String 和StringBuffer的区别

考察点:数据类型

参考回答:

JAVA 平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

相关面试题:String/StringBuffer/StringBuilder区别

关于上述三者的区别以及源码分析,参考我的另一篇文章String StringBuilder StringBuffer区别以及源码分析

本文地址:https://blog.csdn.net/weixin_43591980/article/details/110237040

相关标签: Java基础 java