Java基础 小问题集合

1,char型变量中能不能存贮一个中文汉字?为什么?  

   char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,

   那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

2,自增自减问题

int x = 4;
int y = (x++) + (++x) + (x*10); //5 + 5 + 60
自增自减操作在运算的后面,即a=a++;先运算(赋值)再自增自建
自增自建操作在运算的前面,即a=--a; 先自增自减再运算(赋值)

3,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?  

   对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器报告需要强制转换类型的错误

   对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

   正确的写法为:

s = (byte) (s+1);

4,强制转换的两种类型

float f = 12.3f;
long g = 12345;
f = g; //隐式转换
g = (long)f; //强制转换

5,byte越界问题,byte b = 130 及 byte b = 300是正确的吗

// byte b = 130;
//因为byte的范围是:-128到127。(-2^7--2^7-1), 而130不在此范围内,所以报错。
// 我们可以使用强制类型转换
byte b = (byte)(126 + 4);
System.out.println(b); //-126
byte b2 = (byte)300;
System.out.println(b2); //44

 获取130这个数据的二进制。 00000000 00000000 00000000 10000010 这是130的原码,也是反码,还是补码。
 做截取操作,截成byte类型的了。 10000010 这个结果是补码。
已知补码求原码。

符号位 数值位
补码: 1 0000010
 反码: 1 0000001
 原码: 1 1111110

6,保留小数的两种方法

扫描二维码关注公众号,回复: 100356 查看本文章
System.out.println(-10/3.0);
System.out.println( (float)Math.round( (-10/3.0) *1000 )/1000); //保留3为小数,Math.round
System.out.println(new DecimalFormat("0.00").format(-10/3.00)); //保留2位小数,DecimalFormat.format()

7,求值-3 % 5

System.out.println(-3 % 5);//-3

8,不引入第3个值或者变量,交换2个数据的值

int x = 10;int y = 5;
x = x ^ y; // 10 ^ 5
y = x ^ y; // 10 ^ 5 ^ 5 y = 10
x = x ^ y; // 10 ^ 5 ^ 10 x = 5
System.out.println("x = " + x + ",y = " + y);

9,最高效的计算出2的3次方

System.out.println(2<<3);
将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高


猜你喜欢

转载自www.cnblogs.com/H---/p/8981782.html