byte和int,char类型有啥区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了byte和int,char类型有啥区别相关的知识,希望对你有一定的参考价值。
一个int类型的常量和一个byte类型的常量做减法,结果的类型是int,为什么?
处理流时int和char原始数据类型可以交互使用,为什么??
1、byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。
2、char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 );大小范围 是0—65535 ;char是一个16位二进制的Unicode字符,JAVA用char来表示一个字符 。
3、int是整型数据类型,是有符号型的,占用4个字节,大小范围为:-2147483648到2147483647 参考技术A byte
是字节数据类型
,是有符号型的,占1
个字节;大小范围为-128—127
。char
是字符数据类型
,是无符号型的,占2字节(unicode码
);大小范围
是0—65535
;char是一个16位二进制的unicode字符,java用char来表示一个字符
。 参考技术B 自动转换,容量小的向容量大的转换。char在java中使用的时候其实也是作为int类型使用的。比如你使用for循环可以写for(char c=0;c<100;c++) 参考技术C java规定在做运算时,会有一个自动类型转换,byte short char 在和 int 运算时都会提升成int后,再运算,结果为int;
不考虑负数的情况,char和int可以交互使用,不过int赋给char可能会产生预期外的结果,因为int范围比char大,会发生截取现象,本回答被提问者采纳 参考技术D 据数长度的差别,没什么本质的差别吧...
隐形转换的原因,小类型会自动转成大类型
列数据类型中 BYTE 和 CHAR 的区别
【中文标题】列数据类型中 BYTE 和 CHAR 的区别【英文标题】:Difference between BYTE and CHAR in column datatypes 【发布时间】:2010-09-10 00:49:53 【问题描述】:在Oracle中,有什么区别:
CREATE TABLE CLIENT
(
NAME VARCHAR2(11 BYTE),
ID_CLIENT NUMBER
)
和
CREATE TABLE CLIENT
(
NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
ID_CLIENT NUMBER
)
【问题讨论】:
【参考方案1】:简单地说,当您编写NAME VARCHAR2(11 BYTE)
时,该变量中只能容纳 11 个字节。
无论您使用哪种字符集,例如,如果您使用的是 Unicode (UTF-16),那么在 NAME
中只能容纳 Name 的一半大小。
另一方面,如果您编写 NAME VARCHAR2(11 CHAR)
,那么 NAME
可以容纳 11 个 CHAR,无论其字符编码如何。
如果您不指定BYTE
或CHAR
,则BYTE
是默认值
因此,如果您编写NAME VARCHAR2(4000 BYTE)
并使用Unicode(UTF-16) 字符编码,那么NAME
中只能容纳2000 个字符
这意味着变量的大小限制在BYTES
中应用,并且取决于该变量中可以容纳多少个字符的字符编码。
【讨论】:
【参考方案2】:让我们假设数据库字符集是 UTF-8,这是最新版本的 Oracle 中推荐的设置。在这种情况下,某些字符需要超过 1 个字节才能存储在数据库中。
如果将字段定义为VARCHAR2(11 BYTE)
,Oracle最多可以使用11个字节进行存储,但你可能实际上无法在字段中存储11个字符,因为其中一些需要超过一个字节来存储,例如非英文字符。
通过将字段定义为VARCHAR2(11 CHAR)
,您告诉Oracle 它可以使用足够的空间来存储11 个字符,而不管存储每个字符需要多少字节。单个字符最多可能需要 4 个字节。
【讨论】:
请注意,字符长度语义不会影响VARCHAR2
的 4000 字节最大长度。如果某些字符需要多个字节的存储空间,则声明 VARCHAR2(4000 CHAR)
将允许少于 4000 个字符。
@David Sykes 这在语义上是否与 NVARCHAR(11) 相同?
@Nap 据我所知不是。我相信 NVARCHAR 类型声明中的 size 参数与 VARCHAR2 中的含义相同。即为了确保 NVARCHAR 字符集中有足够的存储空间来存储 11 个字符(不是字节),你会说 NVARCHAR(11 CHAR)。注意:我实际上没有检查过这个。我从未使用过 NVARCHAR。
为了进一步说明两者之间的区别:十六进制编码值的四个字符(即“0xFF”)或三个十进制字符(即“255”)在表示为单字节:11111111。这可能对位标志(最多 8 个设置)、按位运算等有用。
请注意,1 作为 ASCII 字符(dec. 49)是 1001001,而 1 作为位是 00000001。【参考方案3】:
根据系统配置,以 BYTES 为单位测量的 CHAR 大小可能会有所不同。在你的例子中:
-
将字段限制为 11 BYTE
将字段限制为 11 个CHAR角色
结论:1 CHAR 不等于 1 BYTE。
【讨论】:
【参考方案4】:一个正好有 11 个字节的空间,另一个正好有 11 个字符。某些字符集(例如 Unicode 变体)可能每个字符使用一个以上字节,因此 11 字节字段的空间可能少于 11 个字符,具体取决于编码。
另见http://www.joelonsoftware.com/articles/Unicode.html
【讨论】:
【参考方案5】:我不确定,因为我不是 Oracle 用户,但我认为不同之处在于您使用多字节字符集,例如 Unicode (UTF-16/32)。在这种情况下,11 个字节可能占不到 11 个字符。
此外,在重音字符或大小写方面,这些字段类型可能会被区别对待,例如 'binaryField(ete) = "été"' 将不匹配,而 'charField(ete) = "été"' 可能(再次不确定关于甲骨文)。
【讨论】:
以上是关于byte和int,char类型有啥区别的主要内容,如果未能解决你的问题,请参考以下文章