从数据类型和运算符再出发

来源:互联网 发布:share软件下载 编辑:程序博客网 时间:2024/05/14 08:31

我开始了考java驾照~
这些是我们容易忽略的点:

  • java的数据类型一家子
  • 运算符大杂烩

java的数据类型

先了解基本数据类型:

这里写图片描述
这里写图片描述

-雷1:char类型的数据能不能表示一个中文字符?
答案是当然的:char字符占两个字节,而一个中文字符也占两个字节,那当然可以表示呀~因为我是从C语言开始学起的,char在我心目中一直是一个字节,然而…呵呵,好吧在java里是两个字节,我认栽了。

在java中,整数类型默认为int
小数类型默认为double
这在以后程序中为变量分配内存和默认数据类型转换时可能会出现精度丢失的问题
要是我就想用这个类型的不要int或double呢,当然可以,在数值后面加F(float),L(大写,要不然看起来和1一样,不信你自己看,又是一个坑),还有危险的强制类型转换

我们以一道面试题来举例:
1.byte b1=3,b2=4,b;
2.b=b1+b2;
3.b=3+4;
哪句编译失败呢?为什么

好吧,让本宝宝老告诉你们。第二行会报错,为什么呢。看上去没有什么区别,然而这里有个大大的套路,我被完虐*1。

byte b,b1=1,b2=2;//一开始赋值的时候是没问题的b=b1+b2;//变量相加,会先看数据类型(整数默认为int),这里主要判断大转小,还是小转大,如果是大转小就可能会出现丢失精度的问题b=3+4;//常量相加,先把结果相加,如果在Byte范围内,则不报错

过完默认类型转换,让我们感受下强转:

我们可以以一道面试题来举例:
short s=1;s=s+1;
short s=1;s+=1;
上面两个代码有没有问题,如果有,哪里有问题?

你可能能说出第二行有问题,但可能讲不清楚原因,因此我也是被完虐*2呀,泪目~~
那么为什么第二行有问题呢?
扩展的运算符其实隐含了一个强制类型的转换。
s+=1;不是完全等价于s=s+1;
而是等价于s=(s的数据类型)(s+1);所有的整数运算时都会先将值转换为int类型的数,那么在运算后由int转换为short(大转小)就可能会出现丢失精度的问题啦。

运算符

首先我们要知道在计算机中,运算都是有补码的形式进行的。

运算符之“+”:
System.out.println(‘a’);//a
System.out.println(‘a’+1);//98
System.out.println(“hello”+’a’+1);//helloa1
System.out.println(‘a’+1+”hello”);//98hello
System.out.println(“5+5=”+5+5);//5+5=55
System.out.println(5+5+”=5+5”);//10=5+5

这个 问题应该不大~万一犯二了呢,谁知道啊…hehehe

蜜汁记不清的运算符之与或非:

这里写图片描述

-雷2:
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。

蜜汁运算符之位运算符:
这里写图片描述
细节部分:
这里写图片描述

例如:a^b^b的值还是a,为什么,你用补码去算呀~~这在加密算法中常常会用到。比如说传一个数值的时候异或一个值,再告诉接收方再异或这个值就是正确数值。

最后来道烧脑面试题:
如何实现对两个整数变量进行互换?
int a=10;
int b=20;

解1:
int t;
t=a;
a=b;
b=a;
解2:
a=a+b;
b=a-b;
a=a-b;
到这里就差不多了吧,不不不
还有:

解3:
a=a^b;
b=a^b;
a=a^b;

好啦~这道题你差不多就可以满分过啦!!

表示第一次写技术博客,有待改进呀~接下来好好听课,加油

0 0
原创粉丝点击