Java把以0结尾的字符串_Java中字符串为什么不以\0结尾
其实这个问题没有什么好说的,Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的空间用以标明字符串的结束了。
学过C/C++的人都有一种固定的思维模式,凡是字符串都是以\0结束,其实C++中未必,不信你查查string这个泛型类,为了与C语言兼容性,它里面有一个方法c_str()就是返回以\0结束的字符串。
下面是C++/C代码
char str[]=”test”;//这个占5个字节
为什么是5个字节,因为C语言的标准输出函数printf对字符串进行输出时,会判断当前字符是不是\0,如果是\0的话,就停止输出。不信,你可以看看Linux下的Vsprintf.c这个文件
Java中:
char []str=”test”;//编译都通不过
char []str=new char[10];//这样才行,也就是直接指定了其大小
在java中数组其实就是一个对象,学习java时,我们都接触的一句话就是everythingis object,因此数组也不例外,数组对象里还有一个属性叫做length,就是数组的长度,因此对于输出函数来说,有直接的大小可以判断字符串的边界,编译器就没必要再去浪费一个空间标识字符串的结束。
Java中的String类
如下String str=”test”;为什么不能/0作为结束呢,其实上面也说了,String类里面本身就有方法length()可以确定字符串的长度,因些输出时完全可以根据这个长度来输出,当我们调用
System.out.println(str),看源码的话,真正调用的是如下这个函数:
代码:
public void write(String str, int off, int len) throws IOException {
synchronized (lock) {
char cbuf[]
//如果长度小于1K的话;
if (len <= writeBufferSize) {
if (writeBuffer == null) {//如果writeBuffer属于第一次使用,还没申请缓存空间时
writeBuffer = new char[writeBufferSize];
}
cbuf = writeBuffer;
}//大于1K的话
else { // Don't permanently allocate very large buffers.
cbuf = new char[len];
}//将str存入缓存,这里看到了没,这个的len就是字符串的长度
str.getChars(off, (off + len), cbuf, 0);
write(cbuf, 0, len);//向控制台写
}
}
Java把以0结尾的字符串_Java中字符串为什么不以\0结尾相关推荐
- java中的字符串_java中字符串的操作
//创建一个字符数组 char[] charArr = {'a','b','c','d','e','f','g'}; //创建一个字符串 String str = new String(charArr ...
- java indexof 子字符串_Java中字符串中子串的查找共有四种方法(indexof())
Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此 ...
- 替换字符串列表中字符串
//替换字符串列表中字符串 procedure StringsReplace(var S : TStrings; OldPattern, NewPattern: string; Flags: TRep ...
- java中String类是什么_Java中字符串的学习(一)String类的概述及常见方法使用
转载请注明出处http://www.cnblogs.com/devtrees/p/4347079.html (拓展:Api:编程语言对外给我们提供的应用程序接口.) 一.概述: 我们平时上网发帖,帖子 ...
- java 输出字符集合里的字_Java基础 -- 字符串(格式化输出、正则表达式)(示例代码)...
一 字符串 1.不可变String String对象是不可变的,查看JDK文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以包含修改后 ...
- java 字符串总结_Java中字符串(String)总结
先说说JDK API: JDK中包含大量的API类库,所谓API(Application Programming Interface,应用程序编程接口,这些功能以类的形式封装). JDK API包含的 ...
- java string 连续字符_Java中字符串中连续相同字符去重方法
导读 正文 最近参加了一个面试,问到了如何在一个字符串中连续相同字符去重,想了想用正则表达式应该可以轻松实现.可是由于长时间没有编码了,而且由于原先的工作用到的比较少.具体的自己就不会写正则表达式用到 ...
- java 字符串用法_java中字符串的用法
1.String中的每个字符都是一个16位的Unicode字符,用Unicode很容易表达丰富的国际化字符集,比如很好的中文支持.甚至Java的标识符都可以用汉字,但是没人会用吧(只在一本清华的< ...
- java中字符串的操作_java中字符串的操作
//创建一个字符数组 char[] charArr = {'a','b','c','d','e','f','g'}; //创建一个字符串 String str = new String(charArr ...
最新文章
- Microsoft .NET Framework 4.6.1
- html路由怎样做div,路由传参练习.html
- 【推荐】如何使用好阿里云的网络安全隔离?深入分享阿里云ECS安全组实践经验...
- Hive _偏门常用查询函数(三)附带实例(Rank)
- gradle构建多模块项目_Gradle入门:创建多项目构建
- Java的简单了解。
- 读书随笔:The Book of Why——CHAPTER 4~10
- 创建单实例WPF应用程序的正确方法是什么?
- linux多级菜单脚本教程,Linux下使用readline库编程实现多级CLI菜单
- Android 如何发送地理位置消息
- 吐血推荐 ▏看完这个我才知道原来PHP应该这样学!大牛的成功是可以复制的(福利派送)
- oracle数据库设计思维导图,Oracle
- 菜鸟的三遍读书法进阶
- 微信公众号查券返利机器人搭建教程
- BIOS内部模块详解
- 《孙子兵法作战指挥之军形篇》
- 私人服务器用老旧电脑怎样改
- ARM 立即数范围以及合法立即数
- sql2008 r2
- Photoshop色彩混合
热门文章
- CentOS SVN安装与配置 (RHEL5.4平台测试通过)
- “云时代架构”经典文章阅读感想十二
- 20145207 《Java程序设计》第5周学习总结
- 如何用图表控件实现点击图例图标隐藏图表序列
- 【Linux】linux中删除指定文件外所有其他文件(夹)的问题
- Linux/Android Kconfig Makefile defconfig 和 .config关系
- android中SELINUX规则分析和语法简介
- [驱动注册]platform_driver_register()与platform_device_register()
- WinCE文件目录定制
- Ubuntu18常用指令集合(更新中)