其实这个问题没有什么好说的,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结尾相关推荐

  1. java中的字符串_java中字符串的操作

    //创建一个字符数组 char[] charArr = {'a','b','c','d','e','f','g'}; //创建一个字符串 String str = new String(charArr ...

  2. java indexof 子字符串_Java中字符串中子串的查找共有四种方法(indexof())

    Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此 ...

  3. 替换字符串列表中字符串

    //替换字符串列表中字符串 procedure StringsReplace(var S : TStrings; OldPattern, NewPattern: string; Flags: TRep ...

  4. java中String类是什么_Java中字符串的学习(一)String类的概述及常见方法使用

    转载请注明出处http://www.cnblogs.com/devtrees/p/4347079.html (拓展:Api:编程语言对外给我们提供的应用程序接口.) 一.概述: 我们平时上网发帖,帖子 ...

  5. java 输出字符集合里的字_Java基础 -- 字符串(格式化输出、正则表达式)(示例代码)...

    一 字符串 1.不可变String String对象是不可变的,查看JDK文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以包含修改后 ...

  6. java 字符串总结_Java中字符串(String)总结

    先说说JDK API: JDK中包含大量的API类库,所谓API(Application Programming Interface,应用程序编程接口,这些功能以类的形式封装). JDK API包含的 ...

  7. java string 连续字符_Java中字符串中连续相同字符去重方法

    导读 正文 最近参加了一个面试,问到了如何在一个字符串中连续相同字符去重,想了想用正则表达式应该可以轻松实现.可是由于长时间没有编码了,而且由于原先的工作用到的比较少.具体的自己就不会写正则表达式用到 ...

  8. java 字符串用法_java中字符串的用法

    1.String中的每个字符都是一个16位的Unicode字符,用Unicode很容易表达丰富的国际化字符集,比如很好的中文支持.甚至Java的标识符都可以用汉字,但是没人会用吧(只在一本清华的< ...

  9. java中字符串的操作_java中字符串的操作

    //创建一个字符数组 char[] charArr = {'a','b','c','d','e','f','g'}; //创建一个字符串 String str = new String(charArr ...

最新文章

  1. Microsoft .NET Framework 4.6.1
  2. html路由怎样做div,路由传参练习.html
  3. 【推荐】如何使用好阿里云的网络安全隔离?深入分享阿里云ECS安全组实践经验...
  4. Hive _偏门常用查询函数(三)附带实例(Rank)
  5. gradle构建多模块项目_Gradle入门:创建多项目构建
  6. Java的简单了解。
  7. 读书随笔:The Book of Why——CHAPTER 4~10
  8. 创建单实例WPF应用程序的正确方法是什么?
  9. linux多级菜单脚本教程,Linux下使用readline库编程实现多级CLI菜单
  10. Android 如何发送地理位置消息
  11. 吐血推荐 ▏看完这个我才知道原来PHP应该这样学!大牛的成功是可以复制的(福利派送)
  12. oracle数据库设计思维导图,Oracle
  13. 菜鸟的三遍读书法进阶
  14. 微信公众号查券返利机器人搭建教程
  15. BIOS内部模块详解
  16. 《孙子兵法作战指挥之军形篇》
  17. 私人服务器用老旧电脑怎样改
  18. ARM 立即数范围以及合法立即数
  19. sql2008 r2
  20. Photoshop色彩混合

热门文章

  1. CentOS SVN安装与配置 (RHEL5.4平台测试通过)
  2. “云时代架构”经典文章阅读感想十二
  3. 20145207 《Java程序设计》第5周学习总结
  4. 如何用图表控件实现点击图例图标隐藏图表序列
  5. 【Linux】linux中删除指定文件外所有其他文件(夹)的问题
  6. Linux/Android Kconfig Makefile defconfig 和 .config关系
  7. android中SELINUX规则分析和语法简介
  8. [驱动注册]platform_driver_register()与platform_device_register()
  9. WinCE文件目录定制
  10. Ubuntu18常用指令集合(更新中)