首页 > 其他分享 >c += c 与 c = c + number 的异同

c += c 与 c = c + number 的异同

时间:2024-08-11 22:59:33浏览次数:12  
标签:异同 32 number aByte 合法 char 类型 byte

for (int i = 0; i < s.length(); i++) {
        char[] chars = s.toCharArray();
            char c = chars[i];
            c = c + 32;//不合法
            c += 32;//合法
            byte[] bytes = s.getBytes();
            byte aByte = bytes[i];
            aByte = aByte + 32;//不合法
            aByte += 32;//合法
        }

char 类型

char 类型在 Java 中是一个 16 位的无符号整数,用于表示 Unicode 字符。当您对一个 char 类型的值进行算术运算时,Java 会自动将结果转换回 char 类型。因此,以下代码是合法的:

char c = s.charAt(i);
c += 32; // 合法,相当于 c = (char)(c + 32);

在这个例子中,c += 32 实际上是 c = (char)(c + 32) 的简写。即使您直接写 c = c + 32,Java 也会在赋值时自动执行类型转换,所以这也是合法的。

byte 类型

byte 类型在 Java 中是一个 8 位的有符号整数。当您对一个 byte 类型的值进行算术运算时,结果可能会超出 byte 类型的范围(-128 到 127)。因此,直接对 byte 类型的值进行加法运算并将其赋值回 byte 类型是不合法的,除非进行了显式的类型转换。这就是为什么以下代码是不合法的:

byte aByte = bytes[i];
aByte = aByte + 32; // 不合法,因为结果可能超出 byte 范围

然而,使用 += 运算符是合法的,因为它隐含了类型转换:

byte aByte = bytes[i];
aByte += 32; // 合法,相当于 aByte = (byte)(aByte + 32);

在这个例子中,aByte += 32 实际上是 aByte = (byte)(aByte + 32) 的简写。Java 会自动执行类型转换,以确保结果是一个有效的 byte 类型的值。

总结

  • 对于 char 类型,加法运算后的自动类型转换是隐式的,因此无论是 c = c + 32 还是 c += 32 都是合法的。
  • 对于 byte 类型,直接的加法运算可能会导致类型溢出,因此需要显式的类型转换,而 += 运算符隐含了这种转换,所以是合法的。

标签:异同,32,number,aByte,合法,char,类型,byte
From: https://blog.csdn.net/m0_74051652/article/details/141113710

相关文章

  • K11475 丑数[Ugly Numbers,UVa136](set解法)
    题目描述丑数是指不能被2,3,5以外的其他素数整除的数。然后把丑数从小到大排列起来,前11个数如下:1,2,3,4,5,6,8,9,10,12,15,...编写一个程序,计算出第1500个丑数并输出。输入格式无输出格式输出为一行计算出的第1500个丑数替换下面句子中的‘<number>’,再输出。The1500'thuglynum......
  • Leetcode | 202 Happy Number
    分析在快乐数的题意上,通常情况下我们都会去顺着题目的意思去寻找最终结果是否为1,而后面的另一句话很有启示意义:"也可能是无限循环,但始终变不到1",那么为什么不会是无限不循环呢?证明范围限制:对于一个(d)位数的正整数(n),其最大值为99d=Max位数减少:每次计算之后,数字位数d要么减......
  • Codeforces 165E Compatible Numbers 题解
    思路高维前缀和高维前缀和把数的二进制看成一个集合,二进制的每一位为\(1\)为全集\(V\)。根据题目描述,若两数\(a,b\)相容,则\(a\operatorname{and}b=0\),容易发现,\(b\in\complement_{V}a\),所以我们只需要用高维前缀和处理出\(\complement_{V}a\)的一个元素即可。......
  • Leetcode: 586. Customer Placing the Largest Number of Orders
    题目要求如下:给出的例子如下:简单地说就是要找出表中订单最多客户的ID。使用如下的代码进行实现:importpandasaspddeflargest_orders(orders:pd.DataFrame)->pd.DataFrame:returnorders.groupby("customer_number").count().reset_index().nlargest(1,colum......
  • Number of k-good subarrays
    我们发现,如果我们将满足题意的点在数轴上标出,那么我们可以获得若干个连续段。对于一个长度为\(l\)的连续段,他对答案的贡献就是\(\frac{l(l+1)}{2}\),我们把所有连续段的贡献加起来就得到了答案于是我们发现这个可以拆分成子问题,具体见这篇题解。\(sol(n-mx,k-1)\)就是拆分成的子问......
  • [USACO1.5] [IOI1994]数字三角形 Number Triangles
    传送锚点[P1216USACO1.5][IOI1994]数字三角形NumberTriangles-洛谷|计算机科学教育新生态(luogu.com.cn)题目[USACO1.5][IOI1994]数字三角形NumberTriangles题目描述观察下面的数字金字塔。写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最......
  • Collecting Numbers II
    原题链接题解首先,对于数字i如果location[i]<location[i-1]那么遍历次数需要+1,否则不变。因此,对于交换的数字x,y而言,他们只能影响x-1,x+1,y-1,y+1的遍历次数,只需要考虑有限的几种情况即可(需要特判abs(x-y)==1的情况)。code #include<bits/stdc++.h>u......
  • Collecting Numbers II
    原题链接题解如果一个\(k\),其前面没有出现过\(k-1\),那么回合数+1,我们令这样的数叫做断点因此交换两个数\(l,r\)不会影响\([1,l-1],[r+1,n]\)内的断点code#include<bits/stdc++.h>#definelllonglong#definelowbit(x)((x)&(-x))usingnamespacestd;constll......
  • SP8099 TABLE - Crash´s number table 题解
    题目传送门前置知识一般的积性函数|数论分块|莫比乌斯反演解法令\(n\lem\)。考虑莫比乌斯反演,推式子,有\(\begin{aligned}&\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\operatorname{lcm}(i,j)\\&=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\frac{ij}{\gcd(i,j)......
  • 题解:[ABC363D] Palindromic Number
    提示特定位数的回文数数量是可以快速计算出来的,对于特定的位数\(n\),第一位由于不能有前导\(0\),共有\(9\)种选择,而从第\(2\)位到第\(\frac{n+1}{2}\)位都有\(10\)种选择(一个回文数完全由它的前半部分确定)。所以\(n\)位数中共有\(S(n)=9*10^\frac{n-1}{2}......