JAVA笔记1.数据类型与运算符

1.知识引入

1.Java(半编译半解释型语言)、c(纯编译型语言)、c++均属于强类型语言 因此定义一个变量一定要规定它的类型。(javaScript简称js属于弱类型语言)
2.我们所说的变量主要和内存这样的硬件设备有关。所有程序执行起来数据存放在内存、CPU。
3.内存RAM:一断电数据将全部清空,内存越大,即同时运行的程序越多。
硬盘ROM:硬盘越大,存放的数据越多。
4.JAVA中一共有八大基本数据类型,并且都有默认值。

2.整型变量

1.在主方法中定义了一个整型变量,并进行初始化

public class class1 {
    public static void main(String[] args) {
        int a=1;//定义一个整型变量
        System.out.println(a);
    }
}

2.在Java中,初始化操作时可以选的,可以在声明变量时不赋值,不赋值的前提是:必须是在类中的变量!当在类中定义int变量时,默认值为0

public class class1 {
    int a;//在类中定义一个整型变量
    public static void main(String[] args) {
        System.out.println(new class1().a);//JAVA中一切皆对象
    }
}

运行截图:
在这里插入图片描述
3.在Java中,一个int变量占四个字节,和操作系统没有直接关系。字节是计算机中便是空间大小的基本单位。java中没有无符号整数的概念,一个字节占8个比特位,四个字节占32位,其中最高位表示正负,0表示正数,1表示负数。
4.四个字节表示的数据范围是-2^31 -> 2^31 -1,大概是-21亿到+21亿。

public class class1 {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
    }
}

运行结果:
在这里插入图片描述
4.给整型的最大值加一,最小值减一,发生了溢出现象。即当前数据类型放不下当前数据。从而引出更大的数据类型long类型。

public class class1 {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE+1);
        System.out.println(Integer.MIN_VALUE-1);
    }
}

结果:
在这里插入图片描述

2.长整型变量

1.声明格式:
在这里插入图片描述
2.java中,long类型占8个字节,表示的数据范围是-2^63 ->2^63-1

public class class1 {
    public static void main(String[] args) {
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
    }
}

结果:
在这里插入图片描述

3.双精度浮点型变量(重点)

1.java中,double也是8字节,但浮点数的内存布局和整数差别很大,不能用2^n的形式表示数据范围。
2.在java中,int除以int的值仍然是int(会直接舍弃小数部分)
如:

public class class1 {
    public static void main(String[] args) {
        int a=1;
        int b=2;
        System.out.println(a/b);
    }
}

执行结果:
在这里插入图片描述
要想得到正确的结果0.5,需要使用double型计算

public class class1 {
    public static void main(String[] args) {
        double a=1;
        double b=2;
        System.out.println(a/b);
    }
}

在这里插入图片描述
3.当使用double类型进行小数运算时,精度会出现不准,使用BigDecimal代替。
例如:

public class class1 {
    public static void main(String[] args) {
        double a=1.1;
        double b=1.1;
        System.out.println(a*b);
    }
}

在这里插入图片描述
使用BigDecimal类型代替后

public class class1 {
    public static void main(String[] args) {
        BigDecimal a=BigDecimal.valueOf(1.1);
        BigDecimal b=BigDecimal.valueOf(1.1);
        System.out.println(a.multiply(b));
    }
}

在这里插入图片描述

4.单精度浮点型变量

1.float类型在Java中占四个字节,由于表示的数据精度范围较小,一般在工程上用到浮点数都有限考虑double类型,不推荐使用float.
声明格式:

float a=1.0f;//也可以写作1.0F

5.字符类型变量

1.声明格式:

public class class1 {
    public static void main(String[] args) {
      char a='牛';
      char b='N';
        System.out.println(a);
        System.out.println(b);
    }
}

2.一个char就是两个字节,无论时英语还是汉字。
3.计算机中的字符本质上就是一个整数,在c语言中使用ASCII表示字符,而Java中使用Unicode表示字符,因此一个字符占用两个字节,表示的字符种类更多,包括中文。

6.字节类型变量

1.进行网络编程或者文件IO传输使用byte。
2.字节类型表示的也是整数,只占一个字节,表示范围较小[-128,127].
3.字节类型和字符类型互不相干。
声明格式:

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

7.短整型变量

1.声明格式:

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

2.short占用2个字节,表示的数据范围是 -32768—+32767,short表示范围较小,一般不推荐使用

8.布尔类型变量

1.声明格式:

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

2.boolean类型的变量只有两种取值,true表示真,false表示假。
3.java的boolean类型和int类型不能相互转换,不存在1表示true,0表示false这样的用法。
4.boolean类型有些JVM的实现是占一个字节,有些是占一个比特位,这个没有明确规定。

9.字符串类型变量(重点)

1.声明格式:

String name="zhangsan";
System.out.println(name);

2.字符串类型不是基本数据类型,属于类(引用数据类型)
3.在Java中,任何数据类型只要和字符串“+”都会将其转为字符串而后进行字符串的拼接操作。
在这里插入图片描述
4.转义字符
在这里插入图片描述
例如:
在这里插入图片描述

10.变量的作用域

也就是该变量能生效的范围,一般是变量定义所在的代码块(大括号)

11.变量的命名规则

硬性指标:(1)一个变量名只能包含数字,字母,下划线
(2)数字不能开头
(3)变量名是大小写敏感的。(Num、num是两个不同的变量)
软性指标:
1.变量命名要具有描述性,见名知意
2,变量名不宜使用拼音(但是不绝对)
3.变量命名推荐小驼峰命名法。当只有一个单词时,全部小写;当一个变量名由多个单词构成时,除了第一个单词全小写,从第二个单词开始,每个单词的首字母都大写。(重要)

12.常量

1.常量:定义以后不能修改的值。常量指的是运行时类型不能发生改变。
2.final关键字修饰常量。如下:定义一个整型常量

final int a=20;
System.out.println(a);

3.字面值常量
在这里插入图片描述
在这里插入图片描述

13.数值类型的转换

注意:一定是有关系的类型之间的转换
1.大的转小的(需强制类型转换
在这里插入图片描述
会出现精度丢失问题(溢出问题,不推荐)
2.小的转大的(隐式提升
在这里插入图片描述
当小类型与大类型进行运算时,小类型提升为大类型
结论:
1)使用字面值常量赋值的时候,Java会自动进行一些检查校验,判断赋值是否合理。
2)强制类型转换不一定成功,互不相干的类型之间无法强转。
3)不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型。
4)如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能精度丢失

14.理解数值提升

1.int和long混合运算

int a=10;
long b=20;
int c=a+b;//编译出错,提示将long转成int会丢失精度
long d=a+b;//编译通过

结论:当int long混合运算时,int会提升为long,得到的结果仍然是long类型,需要用long类型的变量来接收结果。如果非要使用int来接收结果,就需要使用强制类型转换。
2.byte和byte的运算
在这里插入图片描述
结论:虽然byte和byte时相同类型,但是出现编译报错,原因是虽然a、b都是byte类型,但是在计算a+b时,会先将a、b都提升为int,再进行计算,得到的结果也是int,这时将结果赋值给byte类型的c,就会出现上面的错误。
正确写法:

 public static void main(String[] args) {
     byte a=10;
     byte b=20;
     byte c=(byte)(a+b);
        System.out.println(c);
    }

小结:
1)不同类型的数据混合运算,范围小的会提升成范围大的
2)由于计算机的CPU通常时按照4个字节为单位从内存中读写数据,为了硬件上实现方便,对于short(2字节),byte(1字节)这种比四个字节小的类型,会先提升为int,再参与计算。

3.int和String之间的转换
1)int–>String

int num=10;
//方法1
String s1=num+"";
//方法二
String s2=String.valueOf(num);

2)String–>int

String str="100";
int num=Integer.parseInt(str);

小结

在这里插入图片描述
Java中,所有数据类型都有默认值(再类中定义才有默认值)
整数型默认值:0
小数默认值:0.0
char型默认值:’\u0000’(一个空格)
boolean型默认值:false
在这里插入图片描述

15.运算符

1)算术运算符
基本四则运算符: + - * / %(取余运算) 规则比较简单,值得注意的是除法。
*int/int结果还是int,需要使用double来计算。
*0不能作为除数
*%表示取余,不仅仅可以对int求模,也能对double求模
增量赋值运算符:+= -= *= /= %=

a+=1;//等价于a=a+1;

自增自减运算符: ++ –
a++:先取值后运算
++a:先运算后取值
总结:如果不去自增运算的表达式的返回值,则前置自增和后置自增没有区别;如果取表达式的返回值,则前置自增的返回值是自增之后的值,后置自增的返回值是自增之前的值。
2)关系运算符
关系运算符表示真假,返回值一定为boolean类型(true或false).关系运算符主要有六个:== != < > <= >=
3)逻辑运算符
与&& 或|| 非!(这是单目运算符,只有一个操作数)
注:逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是boolean
在这里插入图片描述
结论:对于&&,如果左侧表达式值为false,则表达式的整体值一定是false,无需计算右侧表达式;对于||,如果左侧表达式值为true,则表达式的整体的值一定是true,无需计算右侧表达式。
4)在这里插入图片描述
4)位运算符(二进制运算)主要有四个:& | ~ ^
Java中对数据的操作的最小单位不是字节,而是二进制位。
*按位与&:如果两个二进制位都是1,则结果为1,否则结果为0;
*按位或| :如果两个二进制位都是0,则结果为0,否则结果为1;
注:当&和|的操作数为整数(int,short,long,byte)的时候,表示按位运算,当操作数为boolean的时候,表示逻辑运算。
*按位取反~ :如果该位为0,则转为1,如果该位为1,则转为0;
(取反操作见车到反码、原码、补码操作)
在这里插入图片描述
注意:
a.0x前缀的数字为十六进制数字,十六进制可以看成是二进制的简化表示方式,一个十六进制数字对应4个二进制位。
b.0xf表示10进制的15,也就是二进制的1111
c.printf能够格式化输出内容,%x表示按照十六进制输出
d.\n表示换行符
*按位异或^:如果两个数字的二进制位相同(可快速定位不同的数),则结果为0,相异则结果为1.(应用很广泛,如:一个数组中只有一个数出现一次,其他数出现两次,请找到这个数)
在这里插入图片描述
一个应用:

public class Class1 {
    public static void main(String[] args) {
    int a=10;//二进制 01010
    int b=20;//10100
        System.out.println(a&b);
        System.out.println(a|b);
        System.out.println(~a);
        System.out.println(a^b);
    }
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/a1fba963c1db4f88a3d0cd81bc60eb77.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA77yN77yNXw==,size_20,color_FFFFFF,t_70,g_se,x_16

16.移位运算(了解)

移位运算符都是按照二进制位来运算的。(注意运行结果是按照十六进制打印的)
*左移<<:最左侧位不要了,最右侧补0
*右移>>:最右侧位不要了,最左侧补符号位(正数补0,负数补1)
*无符号右移>>>:最右侧位不要了,最左侧补0
注意:(不考虑溢出)
1.左移1位,相当于原数字 *2。左移N位,相当于原数字 *2的N次方。
2.右移1位,相当于原数字/2。右移N位,相当于原数字 /2的N次方。
3.由于计算机计算位移(直接在二进制位上进行操作)效率高于计算乘除,当某个代码正好乘除2的N次方的时候可以用一位运算代替。
4.移动负数位或者移位位数多大都没有意义。

17.条件运算符

条件运算符只有一个:表达式1? 表达式2:表达式3。(也是Java中唯一的一个三目运算符
表达式1为true时,输出表达式2的值;
表达式1位false时,输出表达式3的值。

public class Class1 {
    public static void main(String[] args) {
        //求两个整数的最大值
   int a=10;
   int b=20;
   int max=a>b? a:b;//三目运算符
        System.out.println(max);
    }
}
//输出b的值:20
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值