java 数据类型与运算符

一,数据类型

1,基本数据类型:

1)整型:byte  short  int  long

2)浮点:float  double

3)字符:char

4)布尔:boolean

integer可以看作是int的plus版本

2,长整型变量 long

注意事项:

1,长整型变量的初始值后加L或l,推荐加L

2,长整型不论在什么系统下都占8个字节

3,长整型的表示范围是:-2^63到2^63-1

4,long的包装类型为Long

3,短整型变量 short

注意事项:

1,占2个字节16位

2,表示范围:-2^15到2^15-1

3,包装类型:Short

4,默认值为0

4,字节型变量 byte

注意事项:

1,byte在任何系统下都占1个字节

2,byte的范围是:-128到127

3,字节的包装类型是Byte

5,双精度浮点型变量 double

注意事项:

1,double在任何系统下都占8个字节

2,浮点数与整数在内存中的存储方式不同,不能单纯使用2^n的形式来计算

3,double的包装类型为Double

4,double类型的内存布局遵守IEEE 754标准(和c语言一样),尝试使用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差,因此浮点数是个近似值并不是精确值

6,单精度浮点型 float

注意事项:

1,float在任何系统下都占4个字节

2,包装类型是Float

3,float类型的内存布局遵守IEEE 754标准(和c语言一样)

float f = 12.5
float = 12.5F

以上两种写法中,第一种写法会报错(注意末尾加分号,此处省略了)

7,字符型变量 char

char c1 = 'A';//大写字母
char c2 = '1';//数字字符

System.out.println(c1);
System.out.println(c2);

//注意:java中的字符可以存放整型

char c3 = '帅';
System.out.println(c3);

1,java中使用 单引号+单个字母 的形式表示字符字面值

2,计算机中的字符本质上是一个整数,在c语言中使用ASCll表示字符,而java中使用Unicode表示字符,因此一个字符占用两个字节,表示的字符种类更多,包括中文

8,布尔类型 boolean

注意事项:

1,0是假 非零是真 这句话在java中不合适

2,在java中,布尔类型只有2个取值,true或false

3,java中boolean类型不能和int相互转换 因此不存在1表示true ,0表示false这样的用法

4,JVM中没有规定boolean占用几个字节,但oracle(甲骨文)公司的虚拟机中,boolean占1个字节

5,boolean的包装类型是Boolean

二,类型转换

分为两种 自动类型转换(隐式) 强制类型转换(显式)

1,自动类型转换(隐式)

自动类型转换:代码不需要经过任何处理,在代码编译时,编译器会自动处理

特点:数据范围小的转化为数据范围大的时会自动进行

byte b1 = 100;//编译通过,100没有超过byte的范围,编译器隐式将100转化为byte
byte b2 = 257;//编译失败,257超过了byte的数据范围,有数据丢失
System.Out.println(1024);//整型默认情况下是int
System.Out.println(3.14);//浮点型默认情况下是double

2,强制类型转换(显式)

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成.

特点:数据范围大的到数据范围小

int a = 10;
Long b = 100L;
a = (int)b;
//使用了强制类型转换,在编译层面讲不会报错
//但是具有一定风险 在某些情况下可能会丢失内容
byte a = 10;
int b = 129;
a = (byte)b;
//结果输出是 -127

注意事项:(自动类型转换 & 强制类型转换)

1,不同数字类型的变量之间赋值,表示范围更小的类型能隐式转化为范围较大的类型

2,如果需要把范围大的类型赋值给范围小的,需要强制类型转化,但是可能精度丢失

3,将一个字面值常量进行赋值的时候,java会自动针对数字范围进行检查

4,强制类型转换不一定能够成功,不相干的类型不能互相转换

3,byte与byte的运算

byte a = 10;
byte b = 20;
byte c = (byte)(a+c);
//byte c = a + b;会报错,从int转换到byte可能会有损失
System.out.println(c);

结论:虽然a和b都是byte,但是计算a+b时会将a+b都提升为int再进行计算,得到的结果也是int,此时赋值给byte类型的c就会出现错误

由于计算机的CPU通常是按照4个字节为单位从内存中读写数据,为了硬件上实现方便,像byte和short这样低于4个字节的类型,会先提升为int再参与计算

4,字符串类型

1,使用加号可以对字符串进行拼接

String str = "hello";
String str2 = "world";
System.out.println(str+str2);
//会输出 helloworld

注意,在java中,字符串中没有\0结尾的说法

String str = "hello"
System.out.println(str.length());
//结果输出是 5

str.length() 可以输出str的长度

2,在java中用string来定义字符串类型,在有些情况下需要把字符串和整形数字之间进行转换

那么我们如何实现两者之间的转换呢?看代码:

public class Test{
     
    public static void main(String[] args){
          String s = "123";
          //int a = Integer.parseInt(s);
          int a = Integer.valueOf(s);//底层实现parseInt
          System.out.println(a+1);

       }

}//结果输出124

因此要实现字符串和整数之间的转换,可以使用valueof 和 parseint

三,运算符

1,小数求余

对整数求余数我们都知道,但是如何对小数求余数呢?

System.out.println(11.5%2.0);
//结果输出 1.5

因此,%不仅可以对整数取模,也可以对double类型取模,但是没有意义,一般都是对整形取模

在两侧操作数类型不一致的时候,向类型大的提升

System.out.println(1+0.2);
//+的左侧是int,右侧是double,在加之前int被提升为double
//输出1.2

2,增量运算符  += -= *= %=

该种运算符操作完成后,会将操纵的结果赋值给左操纵数

注意:

1,单独使用时,前置++与后置++没有区别

2,如果混合使用,前置++先+1,然后使用变量+1之后的值,后置++先使用变量原来的值,表达式结束后给变量+1

3,常量不能使用自增/自减运算符,因为常数不允许被修改

3,关系运算符      ==    !=     <    >     <=     >=

1,计算结果是true或者false

2,短路求值

System.out.println(10>20 && 10/0==0);//打印false
System.out.println(10<20 || 10/0==0);//打印true

对于&&,如果左侧表达式值为false,则表达式结果一定是false,无需计算右侧表达式

对于 || , 如果 左侧表达式值为true,则表达式结果一定是true,无需计算右侧表达式

对于 & 和 | ,如果表达式结果为boolean,也表示逻辑运算,但与&& ||相比,他们不支持短路求值

3,按位与 & :

只要对应位有0,则当前位就是0

4,按位或  | :

只要对应位有1,则当前为就是1

5,按位异或 ^ :

只要对应位不一样,当前位就是1

6,按位取反 ~ :

把对应位上的每一个都取反 

n ^ n = 0
0 ^ n = 0

这是按位取反的一个小规律

4,位运算符 用于对二进制进行操作

注意:左移和右移运算符优先级较低,使用时建议用括号明确运算顺序

1,左移运算符 <<

注意:向左移位时,丢失的是符号位,因此正数左移可能会编程负数

2,右移运算符 >>

最右侧位不要了,最左侧补符号位(正数补0,负数补1)

3,无符号右移 >>>

无符号右移无论正负,右侧移动后左侧一律补0,仅适用于int和long类型

4,总结:

1,左移一位,相当于原数字 * 2,左移N位,相当于原数字*2的N次方

2,右移一位,相当于原数字 /2,右移N位,相当于原数字/2的N次方

3,由于计算机移位效率高于计算乘除,当某个代码正好乘除2的N次方时,可以用移位运算代替

4,移动负数位或者移位位数过大无意义

5,三目运算符

格式:布尔表达式1? 表达式2 : 表达式3

如果表达式1为真,则返回表达式2的结果,否则返回表达式3的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值