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

  1. Java把以0结尾的字符串_Java中字符串为什么不以\0结尾

    其实这个问题没有什么好说的,Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的空间用以标明字符串的结束了. 学过C ...

  2. java字符串末尾有无0_Java中字符串为什么不以\0结尾

    其实这个问题没有什么好说的,Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的空间用以标明字符串的结束了. 学过C ...

  3. java中字符串的精确匹配_Java最佳实践–字符串性能和精确字符串匹配

    java中字符串的精确匹配 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 我们将专注于如何有效地处理字符串创建, 字符串更改和字符串匹配操作. ...

  4. [转载] Java 中字符串转整型和整型转字符串

    参考链接: Java中的字符串到整数– parseInt() Java 中字符串转整型和整型转字符串 1.字符串转整型Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt ...

  5. 第64节:Java中的Spring Boot 2.0简介笔记

    Java中的Spring Boot 2.0简介笔记 spring boot简介 依赖java8的运行环境 多模块项目 打包和运行 spring boot是由spring framework构建的,sp ...

  6. java中字符串 MD5密码的加密与验证

    java中字符串 MD5密码的加密与验证   MD5即Message-Digest Algorithm 5(信息-摘要 算法 5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译 摘要 ...

  7. Java 中字符串转整型和整型转字符串

    Java 中字符串转整型和整型转字符串 1.字符串转整型 Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt或者valueOf Java代码,如果单个字符或字符串,需要 ...

  8. 【转】Java中字符串中子串的查找共有四种方法(indexof())

    原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下: 1.int ...

  9. Java中字符串中子串的查找共有四种方法(indexof())

    2019独角兽企业重金招聘Python工程师标准>>> public class FirstDemo { /** *API中String的常用方法 */ // 查找指定字符串是否存在 ...

最新文章

  1. Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用
  2. Androidstudio SVN安装与使用
  3. mini2440 之——LED简单控制(裸机) c与汇编
  4. php 同步代码,PHP进程同步代码实例
  5. 在windows上实现多个java jdk的共存解决办法
  6. 搜集的一些有意思的牛人博客地址
  7. docker基础3--容器的基本操作
  8. java赋值两个对象数组 clone_有关java对象数组的clone问题
  9. 金庸15部小说精校版
  10. itextPDF生成表格的pdf
  11. 挖掘目录穿越漏洞实战经验
  12. uni-app 使用API中的uni.chooseImage 上传照片以及uni.previewImage图片预览(身份证照片为例)
  13. 基于OpenCV的土壤裂缝分割系统
  14. mpeg怎么转换成mp4?
  15. 静态网站和动态网站的区别
  16. 半球贴180度全景图片
  17. StarUML for MAC 破解
  18. 概率论应用题,模型汇总(排去抽球模型)
  19. Silane-PEG-NH2 氨基聚乙二醇硅烷 NH2-PEG-Silane结构式
  20. UE4 安卓手机launch报错

热门文章

  1. mysql数据库 菜鸟_MySQL数据库菜鸟教程(一)
  2. 神奇的 Excel 插件:Azure DevOps 插件
  3. nova service的heatbeat机制
  4. DeepXDE 科学机器学习库(薛定谔方程)
  5. Python matplotlib 柱状图 添加平均线
  6. 1.19.5.4.流上的Join、常规Join、时间区间Join、时态表Join、基于处理时间的时态Join、时态表函数Join、用法
  7. html5 ios number,HTML5 Scorecard: The New iPad and iOS 5.1 — A Mixed Bag
  8. APUE读书笔记-第十章-信号
  9. PyTorch实现PPO代码
  10. 习题5-6 对称轴 UVa1595