Java知识点总结第三篇(红色为重点内容,黄色熟记,蓝色部分了解)

一、数值型数据之间的转换

1.自动类型转换

不同类型的数据进行运算时,需先转换为同一类型,然后进行运算。

转换前的数据类型与转换后的类型兼容,且转换后的数据类型的表示范围比转换前的类型大。

范围由“小”到“大”的优先关系为:byte->short/char->int->long->float->double

2.强制类型转换

如果要将较长的数据转换成较短的数据时(不安全),就要进行强制类型转换。

格式:(欲转换的数据类型)变量名

3.数值型和字符串型数据之间的转换(字符串属于引用数据类型)

字符串转换成数值型数据: String MyNumber = "1234.56";

(1)字符串转整形

(2)字符串转单精度浮点 float MyFloat = Float.parseFloat( MyNumber );

(3)字符串转双精度浮点 double MyFloat = Double.parseDouble( MyNumber );

数值型数据转换为字符串:

在Java中,字符串可用“+”来实现 连接操作,若其中某个操作数不是字符串,该操作在连接之前会

自动将其转换成字符串,所以可以用加号来实现自动的转换。(效率很低,不推荐)

<1> int MyInt =1234;

String MyString = ""+MyInt;(“”中无空格)

<2>String MyString = Integer.toString(MyInt);(效率更高)

4. 由键盘输入的数据,不管是文字还是数字,Java解释为字符串。

5.使用Scanner类(java.util类库)输入对象

一个 import java.util.*;

...

Scanner reader = new Scanner(System.in);

double num;

num = reader.nextDouble();

...

多个

Scanner reader = new Scanner(System.in);

num1 = reader.nextInt();

num2 = reader.nextDouble();

...

6.next***()方法被调用后,则等待用户在命令行输入数据并按回车键(或空格键、Tab键)确认。

next()和nextLine()方法表示等待用户在键盘上输入一行文本,然后返回一个String类型的数据。

next()期待用户输入字符串,为空时等待。nextLine()输入为空时结束。

 

二、运算符和表达式

1.

 

2.两个整数相“/”,结果为整数(强制向下取整)

3.不能在浮点数之间作“==”比较(会有精度损失),判断浮点数:差的绝对值在要求精度内即视为相等。

4.对象之间的“==”操作实际上比较的是地址,对象之间的比较应优先使用equals()方法

 5.

 6.位运算(效率很高但可读性差)

>> 向右位移一位 实质:除以2

<< 向左位移一位 实质:乘以2

 

& 按位或 同样的位置上都是1则返回1,否则返回0(0&0、0&1、1&0)

| 按位与 同样的位置上有一个及以上1就返回1,否则返回0(0|0)

^ 按位异或 同样的位置上数目不同时返回1,否则返回0(1^1、0^0)

7.扩展赋值运算符

例如 +=、-=、*=、/=

支持自动类型转换,具有右结合性; a -= b+3; (实质:a = a-(b+3)) (+运算符优先级高)

8.条件运算符(三目运算符)具有右结合性

形式:布尔表达式?表达式1:表达式2 int a=3>4?3:4>5?4:5; (实质:3>4?3:(4>5?4:5))

先判断布尔表达式的值是true还是false,如果是true,则选择表达式1的结果,反之选择表达式2

9.表达式

定义:有运算符和操作数组成的符号序列。

按照运算符的优先级从高到低进行,同级的按结合性进行

10.

 

 

11.自增与自减

在变量前:优先级高于算术运算符 ++a/--a(先进行自增运算,再进行表达式运算)

在变量后:优先级低于算术运算符 a++/a-- (先进行表达式运算,再进行自增运算)

例:int a=1,b=2;

Syatem.out.println(++a * b--); //输出4

设 i=12 ,则表达式 i+=i-=i*=i 的值是 -120 (同级按照结合性 从右向左)

i*=i --> 左边 = i*i =144

i -=144 --> 左边 = i-144 = 12-144 = -132

i += (-132) --> i = i + (-132) = 12 -132 = -120

三、实验

1.

double x,y;

int z;

z = (int)(x/y); x/y必须加括号,不然就是只把x转为int,再用int的x去除double的y,会报错

2.

声明双精度常量PI,值为3.14

final double PI=3.14;

3.汉明距离

汉明距离是一个概念,它表示两个(相同长度)字符串对应位置的不同字符的数量,我们以d(x,y)表示x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。

(1) class ***{

public int hanmingDistance(int x,int y){

int c = x ^ y;

String string = Integer.toBinaryString(c); 输入参数是整型,输出是二进制字符串

int cnt = 0; 如果直接是toString(),输出是十进制

for(int i= 0;i<string.length();i++){

if(string.charAt(i) == '1')

cnt++;

}

return cnt;

}

}

(2)

 

class ***{

public int hanmingDistance(int x ,int y){

int c = x^y;

return Integer.bitCount(c);        // bitCount解释在上面,实质就是求出整型变量二进制数目

                                                    中1的个数。

}

}

(3)class ***{

public int hanmingDistance(int x,int y){

int c = x ^ y;

int cnt = 0;

while(c != 0){

if(c%2 == 1)         让十进制数/2就能让其本来对应的二进制数目去掉最后一位。

cnt++;                            O(log2n)

c = c / 2;

}

return cnt;

}

}

(4) class ***{

public int hanmingDistance(int x,int y){

int c = x ^ y;

int cnt = 0;

while(c != 0){

if((c&1) == 1)

cnt++;

c = c >>> 1;                              O(log2n)

}

return cnt;

}

}

(5) class ***{

public int hanmingDistance(int x,int y){

int c = x ^ y;

int cnt = 0;

while(c != 0){

c = c & (c - 1) ;                   c =c & (c-1) 让二进制数中最后一位为1的那一位置0

cnt++; }                           O(M) M表示二进制数中1的个数,例如有3个1就执行3次

return cnt;                                            M < log2n

}

}

4. 编写一个函数,不用临时变量,直接交换 numbers = [a,b]中a与b的值

(1) class ***{

public int[] swapNumbers(int[] numbers) ){

int a = 1; b =2;

a = a + b;                      如果a原值很大的话,有溢出的风险(超出a数据类型所能承受的范围)

b = a - b;                           (这个设置的其实是数组,但此处利用a和b来做方法上的示例)

a = a - b;

}

}

(2) class ***{

public int[] swapNumbers(int[] numbers) ){

int a = 1; b =2;

a = a ^ b;

b = a ^ b;

a = a ^ b;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值