其实这个问题没有什么好说的,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);//向控制台写
}
}

最新文章

  1. C++ 系列:深拷贝与浅拷贝
  2. Codeforces Round #335 (Div. 2)
  3. LEETCODE —— Single Number
  4. Android Session
  5. BZOJ3619 : [Zjoi2014]璀灿光华
  6. iScroll屏幕滑动函数封装总结
  7. parseInt(),parseFloat(),parse()
  8. Redux源码分析之bindActionCreators
  9. 一文读懂ES6(附PY3对比)
  10. Luogu P3455 [POI2007]ZAP-Queries
  11. JAVA 两个对象不同为什么他们的hashcode有可能相同
  12. C# 创建 写入 读取 excel
  13. WPF ViewBox中的TextBlock自适应
  14. JDBC 查询的三大参数
  15. java方法的继承,覆盖与重载
  16. windows,linux,esxi系统判断当前主机是物理机还是虚拟机?查询主机序列号命令
  17. JavaWeb基础—上传与下载
  18. 矩阵分解-----LDL分解
  19. 【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)
  20. TP框架图片压缩/上传

热门文章

  1. Python匹配中文的正则表达式
  2. Javascript:window.close()不起作用?
  3. 【Vijos 1998】【SDOI 2016】平凡的骰子
  4. Codeforces.809E.Surprise me!(莫比乌斯反演 虚树)
  5. SQL Server 无日志文件附加数据库
  6. C#设计模式泛型注入
  7. redis学习之一 - linux下安装配置
  8. spring---aop(5)---Spring AOP的配置的背后的配置
  9. Oracle DBA学习篇之SQL_TRACE
  10. 计算机音频基础-PCM简介