从浏览器复制的->与IDE手动输入的->有什么本质差异?
两个外观相同的
->的本质差异 - 报错信息里提到的
\u02c2是Unicode字符集里的「修饰符字母尖音」字符,它在绝大多数常用字体的渲染效果和标准ASCII大于号>几乎完全一致,肉眼很难区分。 - Java语法要求Lambda表达式的
->是两个标准ASCII字符的组合:- 第一个是ASCII减号,Unicode编码为
\u002d - 第二个是ASCII大于号,Unicode编码为
\u003e
- 第一个是ASCII减号,Unicode编码为
- 你从Chrome网页复制的代码片段里的「->」,第二个字符已经被网页替换成了
\u02c2,大概率是网页的排版优化、特殊字体替换或者防拷贝机制导致的。Java编译器只能识别标准的ASCII符号组合,遇到非规范的Unicode特殊字符就会抛出非法字符错误。 - 手动输入
->时,输出的是标准ASCII字符,完全符合Java语法要求,因此可以正常编译通过。
小提示:后续遇到同类视觉一致但报非法字符的问题,直接删除报错位置的字符手动重新输入即可,也可以通过IDE的字符编码查看工具确认具体的Unicode编码值定位问题。
内容的提问来源于stack exchange,提问作者likejudo
相关产品推荐
相关产品推荐

