Fork me on GitHub

新学期 要学JAVA 那就写点学到的东西吧

要学JAVA 那就写点最近学到的东西吧

先说说计算机中的知识

在计算机中,所有数据的运算都是采用补码进行的。

在定义 long 类型时要增加标记

E.G:

long j = 100L;

同理在定义单精度 float浮点型数据是也要增加标记

E.G:

float f = 12.345F;

发现了一道值得思考的题目

byte b1 = 3,b2=4,b;

b= b1+b2;

这几行代码会在编译时出现问题

原因:两个byte在做运算时会有类型提升,所以会有问题,将类型转化为int

b= 3 + 4;

然而在做这个运算时就不会出现问题

因为是常量,先把结果计算出来,然后再看是否在byte类型范围中。

byte的范围是 -128~127

关于字符串的个小例子

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


s+=1 & s=s+1 的 区别

仔细看如下代码

short s = 1;

s = s + 1;

System.out.println(s);

这段代码在编译时会出现问题

正如我刚才在上文所说的

类型提升问题

出现精度缺失

short在做运算时会把类型提升为int

故会出现问题

然而

再看如下代码:

short s = 1;

s += 1;

System.out.println(s);

就不会出现问题 += 先进行运算


发现一个看似简单又挺难的问题 ———两个数值的交换

int a = 10;

int b = 20;

需求:把a和b的值交换 把20赋值给a; 10 赋值给 b;

方法一:

int c = a;

a = b;

b = c;

System.out.println("a:"+a+",b:"+b);

方法二: 用位异或实现

a = a ^ b;

b = a ^ b; // a ^ b ^ b = a

a = a ^ b; // a ^ b ^ a

System.out.println("a:"+a+",b:"+b);

方法三:用变量相加的做法

a = a + b; //a = 30

b = a - b; // b = 10

a = a - b; // a = 20

System.out.println("a:"+a+",b:"+b);

方法四:秒杀法

b = (a+b) - (a=b); //b=30-20=10,a=20

System.out.println("a:"+a+",b:"+b);

-------------This is the endThank you for your reading-------------

本文标题:新学期 要学JAVA 那就写点学到的东西吧

文章作者:Chen

发布时间:2017年09月13日 - 21:09

最后更新:2017年09月19日 - 12:09

原始链接:http://zhiweichen.com/2017/09/13/新学期-要学JAVA-那就写点学到的东西吧/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。