为什么Java不包含对无符号整数的支持?
在我看来,这是一个奇怪的遗漏,因为它们允许人们编写不太可能在意外的大输入上产生溢出的代码.
此外,使用无符号整数可以是一种自我文档形式,因为它们表明unsigned int意图保留的值绝不应该是负数.
最后,在某些情况下,无符号整数对于某些操作(例如除法)可能更有效.
包含这些内容的不利之处是什么?
我从2004年开始使用Java编程,主要是企业和Web应用程序.但是除了玩具程序之外我从未使用过short或byte,只是为了知道这些类型是如何工作的.即使在100次的for循环中,我们通常也会使用int.而且我不记得我是否遇到过使用byte或short的任何代码,除了一些公共API和框架.
是的我知道,在内存节省实际上很重要的情况下,您可以使用短或字节来节省大型阵列中的内存.有人关心练习吗?或者它只是书中的东西.
将帖子
使用字节数组进行网络编程和套接字通信是一种非常常见的用法.感谢Darren指出这一点.现在怎么样短?瑞恩,举了一个很好的例子.谢谢,瑞恩.
(这篇文章是关于高频类型编程)
我最近在一个论坛(我认为他们正在讨论Java)上看到,如果你必须解析大量的字符串数据,那么使用字节数组比使用split()的字符串更好.确切的帖子是:
使用任何语言,C++,Java,C#的一个性能技巧是避免对象创建.这不是分配或GC的成本,而是访问不适合CPU缓存的大型内存阵列的成本.
现代CPU比它们的内存快得多.对于每个高速缓存未命中,它们会停止许多周期.大多数CPU转置预算都是通过大缓存和大量滴答来分配的.
GPU通过准备执行大量线程来隐藏内存访问延迟并且几乎没有缓存并将晶体管花费在更多内核上,从而以不同方式解决问题.
因此,例如,不是使用String和split来解析消息,而是使用可以就地更新的字节数组.你真的想避免在大型数据结构上进行随机内存访问,至少在内部循环中是这样.
他只是说"不要使用字符串,因为它们是一个对象并且创建对象是昂贵的"?还是他说了别的什么?
使用字节数组是否确保数据尽可能长时间保留在缓存中?当你使用字符串时它是否太大而无法保存在CPU缓存中?一般来说,使用原始数据类型是编写更快代码的最佳方法吗?
我是java的新手,并试图理解该语言的基本要素和基础知识.
是否准确地说Java字符串对象本质上是一个定义为不可变的字符数组的类?
我问这个,因为与char数组和字符串类相比,我对规范感到有点困惑......
10.9字符数组不是字符串在Java编程语言中,与C不同,char数组不是String,字符串和char数组都不会被'\ u0000'(NUL字符)终止.String对象是不可变的,也就是说,它的内容永远不会改变,而char数组有可变元素.类String中的toCharArray方法返回一个包含与String相同字符序列的字符数组.StringBuffer类在可变字符数组上实现有用的方法.
4.3.3类String的类字符串实例表示Unicode代码点的序列.
我正在用Herbert Schildt的书来学习Java:Java初学者指南.在那本书中出现了这段代码:
// A promotion surprise!
class PromDemo{
public static void main(String args[]){
byte b;
int i;
b = 10;
i = b * b; // OK, no cast needed
b = 10;
b = (byte) (b * b); // cast needed!!
System.out.println("i and b: " + i + " " + b);
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我必须在行中使用(byte):
b = (byte) (b * b); // cast needed!!
Run Code Online (Sandbox Code Playgroud)
b被定义为一个字节,b*b的结果是100,这是一个字节的正确值(-128 ... 127).
谢谢.