java解惑 - 转义字符

下面的程序使用了两个Unicode的转义字符,它们是用其十六进制代码来表示Unicode字符。那么,这个程序会打印什么呢?
public class EscapeRout{
public static void main(String[] args){
// \u0022 是双引号的Unicode转义字符
System.out.println("a\u0022.length()
+\u0022b".length());
}
}



对该程序的一种很肤浅的分析会认为它应该打印出26,因为在由两个双引号"a\u0022.length()+\u0022b"标识的字符串之间总共有26个字符。
稍微深入一点的分析会认为该程序应该打印16,因为两个Unicode转义字符每一个在源文件中都需要用6个字符来表示,但是它们只表示字符串中的一个字符。因此这个字符串应该比它的外表看其来要短10个字符。 如果你运行这个程序,就会发现事情远不是这么回事。它打印的既不是26也不是16,而是2。

理解这个谜题的关键是要知道:Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。编译器在将程序解析成各种符号之前,先将Unicode转义字符转换成为它们所表示的字符[JLS 3.2]。因此,程序中的第一个Unicode转义字符将作为一个单字符字符串字面常量("a")的结束引号,而第二个Unicode转义字符将作为另一个单字符字符串字面常量("b")的开始引号。程序打印的是表达式"a".length()+"b".length(),即2。

如果该程序的作者确实希望得到这种行为,那么下面的语句将要清楚得多:


System.out.println("a".length()+"b".length());


更有可能的情况是该作者希望将两个双引号字符置于字符串字面常量的内部。使用Unicode转义字符你是不能实现这一点的,但是你可以使用转义字符序列来实现[JLS 3.10.6]。表示一个双引号的转义字符序列是一个反斜杠后面紧跟着一个双引号(\”)。如果将最初的程序中的Unicode转义字符用转义字符序列来替换,那么它将打印出所期望的16:

System.out.println("a\".length()+\"b".length());


许多字符都有相应的转义字符序列,包括单引号(\')、换行(\n)、制表符(\t)和反斜线(\\)。你可以在字符字面常量和字符串字面常量中使用转义字符序列。
实际上,你可以通过使用被称为八进制转义字符的特殊类型的转义字符序列,将任何ASCII字符置于一个字符串字面常量或一个字符字面常量中,但是最好是尽可能地使用普通的转义字符序列。

普通的转义字符序列和八进制转义字符都比Unicode转义字符要好得多,因为与Unicode转义字符不同,转义字符序列是在程序被解析为各种符号之后被处理的。

ASCII是字符集的最小公共特性集,它只有128个字符,但是Unicode有超过65,000个字符。一个Unicode转义字符可以被用来在只使用ASCII字符的程序中插入一个Unicode字符。一个Unicode转义字符精确地等价于它所表示的字符。

Unicode转义字符被设计为用于在程序员需要插入一个不能用源文件字符集表示的字符的情况。它们主要用于将非ASCII字符置于标识符、字符串字面常量、字符字面常量以及注释中。偶尔地,Unicode转义字符也被用来在看起来颇为相似的数个字符中明确地标识其中的某一个,从而增加程序的清晰度。

总之,在字符串和字符字面常量中要优先选择的是转义字符序列,而不是Unicode转义字符。Unicode转义字符可能会因为它们在编译序列中被处理得过早而引起混乱。不要使用Unicode转义字符来表示ASCII字符。在字符串和字符字面常量中,应该使用转义字符序列;对于除这些字面常量之外的情况,应该直接将ASCII字符插入到源文件中。
【Java入门基础第10天】Java常用的转义字符 阅读详情

相关推荐

新手必看:SMIC 0.18um PDK安装保姆级教程(附Cadence IC617环境配置)

本文提供SMIC 0.18um PDK在Cadence IC617环境下的详细安装教程,涵盖环境准备、文件解压、安装脚本运行、环境变量配置及Cadence集成验证等关键步骤,特别针对初学者常见问题提供解决方案,助力快速掌握芯片设计工具配置。

weixin_30522183的博客 492

汉字转码和解码的使用

# 汉字转码和解码的使用 http://www.baidu.com:8080/box/index.html?card=中国 在发送请求的时候,如果出现汉字了,最好给他转一下 1、encodeURI 转码 decodeURI 解码(escape和unescape) encodeURI('http://www.baidu.com:8080/box/index.html?card=中国') 转码:"http://www.baidu.com:8080/box/index.html?card=%E4%B8%AD%E

mwh321的博客 1888

关于STM32编译报错:Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).

今天新建工程发现出现一个错误 —— …\Output\CG.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o). 但我觉得我的操作没有任何问题,而且配置和上一个文件比较是一模一样的。 于是我开始百度查询,然后发现了下面几个博客—— @weixin_44133391——STM32 编译错误 @dorlolok——iel5 编译报错 error: L6235E: More than one

纯粹,学术,热爱。 9403

汉字字符编码与转码详解

程序中有汉字参数,经常会遇到编码转码问题,总结下: 1.汉字为多字节字符,须多字节编码解码,如"测试".getBytes("gb2312");这样"测试".getBytes("gb2312")就变成一个byte数组,这时候你可以随意重新指定编码如iso-8859-1, String s1=new String("测试".getBytes("gb2312"),"iso-8859-1

tomspiders的专栏 1022

告别信息过载:我是如何用Feedly RSS阅读器打造个人专属信息流的(附Chrome插件使用技巧)

本文分享了如何利用Feedly RSS阅读器有效管理信息过载,打造个人专属信息流的方法。通过科学组织订阅源、智能过滤和跨平台同步技巧,帮助用户从被动接收转为主动筛选,提升信息获取效率。特别推荐使用Feedly的Chrome插件和AI过滤功能,实现高效的信息管理。

weixin_42526015的博客 357

AI+AB测试提升电商主图点击率实战指南

在电商运营中,主图点击率(CTR)是衡量商品吸引力的核心指标,直接影响转化率和订单增长。通过AI技术批量生成高质量主图素材,结合数据驱动的AB测试方法,可以显著提升点击率。AI工具如MidJourney和Stable Diffusion能够快速生成多样化视觉方案,而自动化处理流水线则确保素材规格统一。AB测试体系通过多维变量控制和流量分配策略,科学验证不同素材效果。这种方法特别适用于需要快速迭代的电商场景,某女装店铺案例显示CTR从1.2%提升至3.8%,验证了AI+数据协同优化的技术价值。

weixin_29058331的博客 298

ubuntu utf-8编码转汉字

比如: \345\276\205\345\255\246\344\271\240 1.首先把\345为八进制,转换成十六进制 >>> hex(0345) '0xe5' >>> hex(0276) '0xbe' >>> hex(0205) '0x85 2.上面转换三个是因为,每三个表示一个汉字 e5be85 => %E5%BE%85 ...

lexiaoyao521314的博客 1025

硬件-汽车电子-TBOX/TCAM核心器件选型与系统集成设计指南

本文深入解析汽车电子TBOX/TCAM硬件架构与系统集成设计,涵盖核心器件选型、电源管理、信号完整性优化等关键点。重点分享5G模组选型避坑经验、MCU隐性指标及热设计验证方案,为车载通信系统开发提供实用指南。

weixin_30352645的博客 531

java中双引号和单引号的区别

运算符在比较对象时,并不是比较它们的内容,而是比较它们在内存中的地址是否相同。但是在比较字符串(使用双引号表示的内容)是否相等时,应该使用。总结:双引号用于表示字符串,单引号用于表示字符,它们在使用场景和表示的数据类型上有很大的区别。需要注意的是,使用双引号包含的是字符串,使用单引号包含的是字符。运算符比较两个char类型的值时,它会比较它们的Unicode码点是否相等。在Java中,对于字符串(使用双引号表示的内容),应该尽量避免使用。运算符会比较它们在内存中的地址,而不是比较字符串的内容。

盖丽男 5153

基于YOLOv8的表面裂痕等缺陷检测:深度学习与UI界面的实践

本文详细介绍了如何使用YOLOv8进行表面裂痕等缺陷检测,并结合图形用户界面展示检测结果。通过YOLOv8的强大能力,我们可以实现高效、准确的表面缺陷检测,提升工业产品的质量控制水平。未来,随着深度学习技术和数据集的不断发展,表面缺陷检测的精度和速度将不断提升,应用领域也将进一步拓展。希望本文的实践能够为深度学习在工业检测领域的应用提供一些启示。

YOLO 550

Zephyr内核——内存管理——内存堆

Zephyr提供了一组允许线程动态分配内存。

wayne2018的博客-心情驿站 772

JAVA中转义字符

JAVA中转义字符 2010年08月11日 星期三 上午 12:22 JAVA中转义字符: 1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377'       \0:空字符 2.Unicode转义字符:\u + 四个十六进制数字;0~65535      \u0000:空字符 3.特殊字符:就3个       \":双引号

GeneralYY0的专栏 25万+

【ComfyUI】QwenImageEdit + Z-Image 面部融合图生图

本文介绍了一种基于Stable Video Diffusion(SVD)模型的ComfyUI图生视频工作流,能够将静态图片转换为动态视频。工作流包含模型加载、图像导入、条件生成、视频采样、解码合成等8个核心步骤,通过SVD_img2vid_Conditioning节点实现视觉语义转换。该方案适用于创意视频制作、产品演示等场景,支持设计师和AI爱好者快速实现"以图生动"效果。文中详细说明了工作流架构、关键节点功能、操作流程及应用案例,并提供了模型参数和使用注意事项。

Mr数据杨 1814

java转义字符怎么用_详解JAVA中转义字符

本文主要介绍JAVA中转义字符,分享给大家。具体如下:1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377'\0:空字符2.Unicode转义字符:\u + 四个十六进制数字;0~65535\u0000:空字符3.特殊字符:就3个\":双引号\':单引号\\:反斜线4.控制字符:5个\' 单引号字符\\ 反斜杠字符\r 回车\n 换行\f 走纸换页\t 横向跳格\b 退格点的转...

weixin_32668987的博客 3863

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java转义字符

文章系统介绍了Java中各类转义字符的用法,包括标准转义序列(如\n、\t)、Unicode转义(\u)以及特殊场景应用。重点讲解了字符串处理、正则表达式、文件路径中的常见陷阱与正确写法,并提供了ANSI颜色输出、SQL处理等高级应用示例。文章还强调了编译时处理机制、性能优化建议,推荐使用专用库处理HTML/XML/JSON等结构化数据。最后指出合理使用转义字符对代码质量、安全防护的重要价值,是Java开发者必须掌握的核心技能。

weixin_74120671的博客 2942

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java——转义字符

本文主要介绍Java中的转义字符

Stewie Lee的博客 7593

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java的转义字符表

例如,如果我们需要在字符串中表示反斜杠字符本身,我们需要使用两个连续的反斜杠("\")。在Java中,也提供了一组转义字符,用于表示特定的字符或控制序列。然而,制表符应该使用 \t 进行表示,而不是在字符串中直接使用。然而,换行符应该使用 \n 进行表示,而不是在字符串中直接使用。然而,回车符应该使用 \r 进行表示,而不是在字符串中直接使用。然而,在字符串中表示反斜杠字符本身应该使用 \,而不是 \。在这个错误的示例中,我们在输出字符串中使用了错误的转义字符,导致编译错误或输出结果不符合预期。

牛肉胡辣汤 1742

JAVA转义字符

JAVA中转义字符 2009-08-12 17:40   JAVA中转义字符: 1.八进制转义序列: + 1到3位5数字;范围'00'~'377' :空字符 2.Unicode转义字符:u + 四个十六进制数字;0~65535 u0000:空字符 3.特殊字符:就3个 ":双引号 ':单引号 \:反斜线 4.控制字符:5个 ' 单引号字符 \ 反斜杠字符 r 回车

ABC006250的专栏 910

java 转义符 输出,Java转义字符怎么输出的

Java转义字符怎么输出的以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Java转义字符怎么输出的转义字符输出的代码如下:str.replace("\n","") 回车str.replace("\t","")换行str.replace(" ","")空格str.trim()前后空格java 输出%号 转义字符问题Str...

weixin_30356285的博客 3397

java中常用的转义字符_java常用转义字符

JAVA中转义字符2009-08-12 17:40JAVA中转义字符:1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377'\0:空字符2.Unicode转义字符:\u + 四个十六进制数字;0~65535\u0000:空字符3.特殊字符:就3个\":双引号\':单引号\\:反斜线4.控制字符:5个\' 单引号字符\\ 反斜杠字符\r 回车\n 换行\f 走纸换页\t 横向跳格...

weixin_35691715的博客 2061

java 字符串中转义字符_Java中的转义字符

java 字符串中转义字符Learn how we can use escape sequence in Java了解如何在Java中使用转义序列 These characters can be any letters, numerals, punctuation marks and so on. The main thing when creating a string is that the ...

weixin_26720549的博客 6133

java 解析转义字符_JAVA中转义字符

AVA中转义字符2010年08月11日 星期三 上午 12:22JAVA中转义字符:1.八进制转义序列:\ + 1到3位5数字;范围’\000’~’\377’\0:空字符2.Unicode转义字符:\u + 四个十六进制数字;0~65535\u0000:空字符3.特殊字符:就3个\”:双引号\’:单引号\:反斜线4.控制字符:5个\’ 单引号字符\ 反斜杠字符\r 回车\n 换行\f 走纸换页\t...

weixin_32660773的博客 894

java双引号的转义字符_JAVA中转义字符

JAVA中转义字符:1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377'\0:空字符2.Unicode转义字符:\u + 四个十六进制数字;0~65535\u0000:空字符3.特殊字符:就3个\":双引号\':单引号\\:反斜线4.控制字符:5个\' 单引号字符\\ 反斜杠字符\r 回车\n 换行\f 走纸换页\t 横向跳格\b 退格点的转义:. ==> \u002E...

weixin_39921131的博客 8849

【Java】转义字符

Java中常用的转义字符,在ChangeChar.java文件中所示: //演示转义字符的使用 public class ChangeChar{ public static void main(String[] args){ // \t:一个制表位,实现对齐功能 System.out.println("北京\t天津\t重庆"); // \\:输出一个\ System.out.println("路径A\\路径B"); // \":输出一个" System.out.printl

chengwei1128的博客 4929
上一篇: java解惑 - 最后的笑声
下一篇: java解惑 - 漂亮的火花
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值