初识Java之数据类型和运算符


一、数据类型

(一)基础数据类型

1.1.1 整形变量

基本语法格式:

int 变量名 = 初始值;

示例:

int num=10;
System.out.println(num);

注意事项:
1.int占4个字节,其对应包装类为Integer
2.查看int型的最大值和最小值:

System.out.println(Integer.MAX_VALUE);//2^31-1
System.out.println(Integer.MIN_VALUE);//-2^31
1.1.2 长整型变量

基本语法格式:

long 变量名 = 初始值;

示例:

long num=10L;
System.out.println(num);

注意事项:
1.long占8个字节,其对应包装类为Long
2.初始化设定的值为10L或10l(小写L,不易区分,不建议使用),10L是默认long型,若单纯为10则为int型
3.查看long型的最大值和最小值:

System.out.println(Long.MAX_VALUE);//2^63-1
System.out.println(Long.MIN_VALUE);//-2^63
1.1.3 短整型变量

基本语法格式:

short 变量名 = 初始值;

示例:

short num=10;
System.out.println(num);

注意事项:
1.short占2个字节,其对应包装类为Shor
2.查看long型的最大值和最小值:

System.out.println(Short.MAX_VALUE);//2^15-1
System.out.println(Short.MIN_VALUE);//-2^15
1.1.4 双精度浮点型:

基本语法格式:

double 变量名 = 初始值;

示例:

double num=1.0;
System.out.println(num);

注意事项:
1.double占8个字节,对应包装类为Double
2.浮点数类型的在内存中存储比较特殊,遵循IEEE 754标准(这方面和C语言相同),都是尝试使用有限的空间表示有无限可能的小数,所以势必会存在误差!例如下面这个代码:

double num=1.1;
System.out.println(num*num)//结果为1.2100000000000002

(这主要原因在于2^-1=0.5,可见在小数部分用二进制表示是很难准确表达0.1的)

1.1.5 单精度浮点型

基本语法格式:

float 变量名 = 初始值;

示例:

float num=1.0f;
System.out.println(num);

注意事项:
1.float占4个字节,对应包装类为Float
2.float因为想使用更小的内存表示一个浮点数,可见其精度相比于double类型必定要做出一定的让步
3.注意示例中的代码中1.0f(或者写成1.0F),对于float类型的变量赋值时必须加上F或者f,表示此数为float,否则会默认为double类型,若将double类型变量赋给float类型变量则会存在精度丢失的问题!
(上面对于长整型,l或者L可以省略,因为整形默认为int,将int类型变量赋给long类型变量不存在精度丢失的问题)

1.1.6 字符类型

基本语法格式:

char 变量名 = 初始值;

示例:

char ch='A';
System.out.println(ch);

注意事项:
1.char占两个字节(原因是Java中的char是利用Unicode编码表示,所占字节数比ASCII码大的多,所能表示的字符种类也就更多,可以理解ASCII码表为Unicode编码表的子集),对应包装类为Character
2.在用命令行编码时如果遇到“未结束的字符文字”,可能是因为命令行编码使用的是GBK编码,可以加上命令-encoding UTF-8

1.1.7 字节类型

基本语法格式:

byte 变量名 = 初始值;

示例:

byte value=0;
System.out.println(value);

注意事项:
1.byte占一个字节(可以认为这类似于C语言的char类型),对应包装类为Byte
2.byte虽然类似于C语言的char类型,但是byte与char互不相干,因为byte没有对应的字符
3.byte的取值范围:

System.out.println(Byte.MAX_VALUE);//2^7-1
System.out.println(Byte.MIN_VALUE);//-2^7

4.注意!!!隐式类型转换!!!,任何小于int类型大小的数值数据参与运算都会转换成int类型

1.1.8 布尔类型

基本语法格式:

boolean 变量名 = 初始值;

示例:

boolean value = true;
System.out.println(value);

注意事项:
1.boolean占用具体多少个字节并未明确规定,有些JVM实现是1个比特位,有些则是一个字节,对应包装类为Boolean
2.boolean是个比较单独的数据类型,不能转换成其他类型!!因为Java中没有C语言中0为假,非0为真的规定,Java中真即为true,假即为false,boolean也只有这两个值,不要于数字挂钩,这也意味着while(1)在Java中会报错!

(二)引用数据类型

1.2 字符串类型

基本语法格式:

String 变量名 = "初始值";

示例:

String name = "zhang san";
System.out.println(name);

注意事项:
1.String是引用类型,其本质是一个类
2.字符串的+操作,表示为字符串拼接

String a = "Hello";
String b = "World";
String c = a + b;
System.out.println(c);//Hello World

3.字符串与整数亦可以拼接

String str = "result = ";
int a = 10;
int b = 20;
String result = str + a + b;
System.out.println(result);//result = 1020

数据类型可以总结为下面这个表,默认值在类和对象才考虑(实例变量不初始化时)。
在这里插入图片描述

二、运算符

2.1 算术运算符

2.1.1 基本四则运算符:+ - * / %
除法:/

注意事项:
a) int / int结果还是int,若要保持小数部分用double

int a=1;
int b=2;
System.out.println(a/b);//0

b)0不能作为除数,会报异常

取模:%

注意事项:
a)Java中的%不仅可以对int取模,也可以对double取模

System.out.println(11.5/2.0);//1.5
2.1.2 增量赋值运算符:+= -= *= /= %=

复合赋值运算符其实是赋值运算的简写,但事实上有些不太一样,因为增量赋值运算符会自动帮我强制转换

byte a=1;
System.out.println(a+=2);
 System.out.println(a=a+2);//err 

因为这里存在隐式类型转换 a+2是int类型!!

2.1.3 自增/自减运算符:++ –

1.如果不取自增\自减运算的表达式的返回值,则前置和后置没有区别
2.如果取表达式的返回值,则前置自增\自减的返回值是自增\自减之后的值,后置自增\自减的返回值是自增\自减之前的值

2.2 关系运算符:== != < > <= >=

int a=10;
int b=20;
System.out.println(a == b);        System.out.println(a > b);        System.out.println(a < b);       System.out.println(a != b);        System.out.println(a >= b);        System.out.println(a <= b);

2.3 逻辑运算符:&& || !

逻辑与:&&

1.两个操作数有一个为false,结果为false
2.存在短路操作

System.out.println(10 > 20 && 10 / 0 == 0);//不会出异常 因为短路 只要第一个为false,后面不运算
逻辑或:||
System.out.println(10 < 20 || 10 / 0 == 0);//不会出异常 因为短路,只要第一个为true,后面不运算

两个操作数有一个为true,结果为true

逻辑非:!

操作数为true,结果为false;操作数为false,结果为true

System.out.println(!true);

2.4 位运算符:& | ~ ^

按位与:&

如果两个二进制都是1,则结果为1,否则结果为0

int a=10;
int b=20;
System.out.println(a & b);
按位或:|

如果两个二进制都是0,则结果为0,否则结果为1

int a=10;
int b=20;
System.out.println(a | b);

注意:当 & 和 | 的操作数为整数时,表示按位运算,当操作数为boolean的时候,表示逻辑运算(此时&和&&类似,|和||类似,但是&和|无短路求值)

按位取反:~

如果二进制位中该位为0则转为1,如果该位为1则转为0

int a=0xf;
System.out.printf("%x\n",~a);

注意:
1.0x 表示十六进制 0表示八进制
2.printf表示为格式化输出内容
3.%x表示按照十六进制输出

按位异或:^

如果两个数字的二进制位相同,则结果为0,相异则结果为1

int a = 0x1;
int b = 0x2;
System.out.printf("%x\n",a^b);

特性:
1.相同数异或为0
2.0异或任何数结果为该数

2.5 移位运算符:<< >> >>>

左移 <<:

最左侧位不要了,最右侧补0

int a = 0x10;
System.out.printf("%x\n",a<<1);//20(十六进制表示)

左移<<的结果相当于乘于2,当然对于负数例外

右移 >>:

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

int a = 0x10;
System.out.printf("%x\n",a>>1);//8(十六进制表示)

右移 >>的结果相当于除于2,当然对于负数例外

无符号右移 >>>:

最右侧位不要了,最左侧补0

2.6 条件运算符:?

表达式1(结果为boolean) ? 表达式2:表达式3
表达式1为true,整个表达式值位表达式2;表达式1为false,整个表达式值位表达式3;

int a = 10;
int b = 20;
System.out.printfln(a>b?a:b);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值