我一直在测试char casting,我经历了以下几点:
public class Test {
public static void main(String a[]) {
final byte b1 = 1;
byte b2 = 1;
char c = 2;
c = b1; // 1- Working fine
c = b2; // 2 -Compilation error
}
}
有人能解释为什么我在1中给字节添加了一个final时它工作得很好吗?
这是因为字节是有符号类型,而字符不是,所以需要对(2)应用显式类型转换
c = (char)b2;
最后的语句也适用于1,因为在编译之前,编译器能够确认没有由于转换而丢失,因为'1'在char的范围内,尝试将'-1'与(1)中的相同的最后语句放在一起,您将再次得到编译错误。
所有这些都归结为有符号和无符号类型之间的类型兼容性。。这需要在java中显式完成。
从字节
到字符
的转换是一种扩大和缩小的原语转换,如Java语言规范第5.1.4段所述。
正如JLS所描述的,这是通过中间步骤完成的;通过拓宽原语转换将byte
转换为int
,然后通过缩小原语转换将int
转换为char
(参见5.1.3)。
第5.2段解释了当你做作业时,什么时候需要演员阵容:
... 如果表达式是byte
、short
、char
或int
类型的常量表达式(§15.28):
字节
、短
或字符
,并且常数表达式的值可以用变量的类型表示,则可以使用缩小原语转换
变量b1
确实是一个常数,但变量b2
不是,因此此规则适用于b1
,但不适用于b2
。
因此:您可以将b1
分配给c
,因为b1
是一个常数,常数1
的值适合char
,但您不能将b2
分配给c
,而不进行强制转换,因为b2
不是一个常数。
当变量为final
时,编译器会自动内联其值1。该值可表示为字符
,即:
c = b1;
是相当于
c = 1;
事实上,根据final
变量的这一节,b1
被视为一个常数:
原始类型或类型String
的变量,即最终类型
,并用编译时常量表达式初始化(§15.28),称为常量变量。
我遇到了这样一个java字符串,其中以下内容是错误的: 我想这是因为字符串构造函数默认将主体字节[]的编码视为UTF-8,我不是100%确定。我如何能够将此字符串存储在字节[]中,并能够稍后将其转换回来?我想我需要能够确定字节[]的编码方式。我该怎么做呢? 一些上下文:我需要字节[],以便压缩数据,将其存储在数据库中,然后解压缩并将未压缩的字节[]转换回原始字符串。这个字符串最初来自某个下载了网页
问题内容: 我一直在测试字符转换,并经历了以下过程: 任何人都可以解释为什么当我在字节中添加final后在1中可以正常工作吗? 问题答案: 当变量为时,编译器将自动内联其值为1的值。该值可表示为,即: 相当于 实际上,根据本节中有关变量的部分,将其视为常量: 原始类型或类型的变量,即,用一个编译时间常量表达式(§15.28)初始化,被称为 恒定变量 。
如何将字符串(字节字符串)转换为字节(字节字符串),而不必手动复制和粘贴字符串并在其前面放置b?
问题内容: 我试图理解一个到字符串,一个的字符串表示形式到转换…我将我的转换成一个要发送的字符串,然后我希望我的Web服务(用python编写)将数据直接回显给客户端。 当我从Java应用程序发送数据时… 字节发送.. 发送(这是Arrays.toString()的结果,它应该是我的字节数据的字符串表示形式,该数据将通过电线发送): 在python端,python服务器将字符串返回给调用方(我可以
我正在制作一个Android应用程序,它可以与蓝牙设备进行通信。我正在为选定的特征写一条特定的信息,如下所示: 我的转换函数如下所示: 我试图弄清楚为什么在这种情况下,我的转换输出是这样的: D/上传数据集:消息:�������������������� 这很奇怪,因为当我使用相同的转换函数来转换作为蓝牙通知接收到的值时,它工作得非常好。欢迎提出问题所在的任何建议