Java语法(全面解析)

本文详细解析了Java语法,包括字符型常量与字符串常量的区别、注释类型、标识符与关键字的差异、自增自减运算符的用法,以及continue、break和return的区别。此外,还介绍了Java泛型的概念、类型擦除以及常用的通配符。最后,讨论了==与equals的区别以及hashCode()和equals()的关系。

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

1. Java 语法

1.1. 字符型常量和字符串常量的区别?

1. 形式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的若干个字符

2. 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)

3. 占内存大小 字符常量只占 2 个字节; 字符串常量占若干个字节 (注意: char 在 Java 中占两个字节)

 

1.1.2. 关于注释?

Java 中的注释有三种:

1. 单行注释

2. 多行注释

3. 文档注释。

在我们编写代码的时候,如果代码量比较少,我们自己或者团队其他成员还可以很轻易地看懂代码,但 是当项目结构一旦复杂起来,我们就需要用到注释了。注释并不会执行,是我们程序员写给自己看的, 注释是你的代码说明书,能够帮助看代码的人快速地理清代码之间的逻辑关系。因此,在写程序的时候 随手加上注释是一个非常好的习惯。

《Clean Code》这本书明确指出:

 

 

1.1.3. 标识符和关键字的区别是什么?

在我们编写程序的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了标识符,简单来说,标识符就是一个名字。但是有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方,这种特殊的标识符就是关键字。因此,关键字是被赋予特殊含义的标识符。比如,在我们的日常生活中 “警察局”这个名字已经被赋予了特殊的含义,所以如果你开一家店,店的名字不能叫“警察局”, “警察局”就是我们日常生活中的关键字。

1.1.4. Java中有哪些常见的关键字?

 

1.1.5. 自增自减运算符

在写代码的过程中,常见的一种情况是需要某个整数类型变量增加 1 或减少 1,Java 提供了一种特殊的运算符,用于这种表达式,叫做自增运算符(++)和自减运算符(--)。

++和--运算符可以放在操作数之前,也可以放在操作数之后,当运算符放在操作数之前时,先自增/减, 再赋值;当运算符放在操作数之后时,先赋值,再自增/减。例如,当“b=++a”时,先自增(自己增加1),再赋值(赋值给 b);当“b=a++”时,先赋值(赋值给 b),再自增(自己增加 1)。也就是,++a 输出的是 a+1 的值,a++输出的是 a 值。用一句口诀就是:“符号在前就先加/减,符号在后就后加/减”。

1.1.6. continue、break、和return的区别是什么?

在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要 在循环的过程中,当发生了某种条件之后 ,提前终止循环,这就需要用到下面几个关键词:

1. continue :指跳出当前的这一次循环,继续下一次循环。

2. break :指跳出整个循环体,继续执行循环下面的语句。

return 用于跳出所在方法,结束该方法的运行。return 一般有两种用法:

1. return; :直接使用 return 结束方法执行,用于没有返回值函数的方法

2. return value; :return 一个特定值,用于有返回值函数的方法

1.1.7. Java泛型了解么?什么是类型擦除?介绍一下常用的通配符?

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为 一个参数。

Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,这也就是通常所说类型擦除 。

 

泛型一般有三种使用方式:泛型类、泛型接口、泛型方法。

1. 泛型类

 

如何实例化泛型类:

 

2. 泛型接口 :

 

实现泛型接口,不指定类型:

 

实现泛型接口,指定类型:

 

3. 泛型方法 :

 

使用:

 

常用的通配符为: T,E,K,V,?

 

1.1.8. ==和equals的区别

 

Object 类equals() 方法:

 

 

举个例子:

 

 

String 类equals() 方法:

 

 

1.1.9. hashCode()与 equals()

面试官可能会问你:“你重写过hashCode和equals,为什么重写equals时必须重写hashCode方法?”

1) hashCode()介绍:

 

散列表存储的是键值对(key-value),它的特点是:能根据“键”快速地检索出对应的“值”。这其中就利用 到了散列码!(可以快速找到所需要的对象)

2) 为什么要有 hashCode?

我们以“ HashSet 如何检查重复”为例子来说明为什么要有 hashCode?

当你把对象加入 HashSet 时, HashSet 会先计算对象的 hashcode 值来判断对象加入的位置,同时也会与其他已经加入的对象的 hashcode 值作比较,如果没有相符的 hashcode, HashSet 会假设对象没有重复出现。但是如果发现有相同 hashcode 值的对象,这时会调用 equals()方法来检查hashcode 相等的对象是否真的相同。如果两者相同, HashSet 就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。(摘自我的 Java 启蒙书《Head fist java》第二版)。这样我们就大大减少了 equals 的次数,相应就大大提高了执行速度。

3)为什么重写equals 时必须重写hashcode 方法?

 

4) 为什么两个对象有相同的 hashcode 值,它们也不一定是相等的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值