Java数据类型与运算符

前言

Java是一种广泛使用的编程语言,它以其“一次编写,到处运行”(Write Once, Run Anywhere,简称WORA)的理念而闻名。Java的学习将伴随着该文章展开!!

一.数据类型

Java的数据类型大体与C语音相类似,又有些许不同,且听我道来。

基本数据类型分为整型,字符型,浮点型以及布尔类型

 1.1.整型int

int 类型的包装类类型为Integer。所谓包装类就是基本数据类型对应的类类型,可以理解为int类型的plus版本!具备更多功能。

int 在Java中占4个字节 范围在-2的31次方到2的31次方-1之间。我们可以通过求类型的范围最大最小值来验证。 在idea编译器中输入大写MAX回车可以快捷算最大值。

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

这个数字相信大家并不陌生! 

1.2.长整型long

long类型占8个字节,在Java中没有x86与x64的区分,这也体现了Java的可移植性

"Write Once, Run Anywhere"  long类型范围在-2的63次方到2的63次方-1之间。

long类型的包装类型为Long;

需要注意的是在Java中定义long类型数据需要使其变为一个字面常量(如下),否则会默认成int类型!

public static void main(String[] args) {
        long a=10L;
        System.out.println(a);
    }

这就涉及到类型转换的问题 :

public static void main(String[] args) {
        long a=10L;
        int b = 20;
        b=a;
        System.out.println(a);
    }

由于int 范围大小小于long类型,所以会发生不兼容(数据损失)的情况报错!

long l = 2147483648L;
int i = (int) l; // 强制转换,可能会导致数据丢失

此时若是强制类型转化,就会导致数据丢失! 打印数据如下,为什么会打印负数呢?让我用一张图来帮你解除疑惑。

可以理解为,当发生溢出时,int范围的最大值就向圆的另一边走 !

 

1.3.短整型short 

 short类型内存占用2字节!范围为-32768到32767,包装类类型为Short。

除了int与char类型的包装类不是首字母大写!其余都是首字母大写

少于四个字节的运算会提升为四个字节再运算!

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

 

需要转化字符类型如下:

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

 

1.4.字节型byte

内存占用1字节,范围在-128到127之间,包装类是Byte。

强制类型转换存在隐患

若是int转为byte

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

打印-128 ,发生了溢出

若是byte转为int

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

打印10 ,因为int 的范围大于byte,所以不会发生溢出!

2.字符型char

char类型与C语言不同,内存占用为2字节,这也意味着char类型可以存储中文中文也是两个字节),大小范围在0到65535,可以发现char是没有负数的,当然这也符合我们的认知。需要注意的是char的包装类类型为Character。

public static void main(String[] args) {
        char a='鱼';
        System.out.println(a);
    }

 

3.1单精度浮点数 float

3.2双精度浮点数double

float类型的内存占用4个字节,double类型为8个字节。他们是有大小范围的,但一般不关注!

public static void main(String[] args) {
        float f = 12.5;
    }

知识点接上文,为什么会报错呢?答案是float类型定义时默认为double类型,是八字节的,若没有将其变为一个float类型的字面常量,数据会发生损失。 

 

public static void main(String[] args) {
        float f = 12.5F;
    }

 

4.布尔型boolean

boolean 只有两个可能的值:truefalse。而 Booleanboolean 的包装类,它是一个对象,可以包含 null 值。boolean类型没有明确规定内存占用,范围也只为true和false。

boolean primitiveBool = true;
Boolean objectBool = primitiveBool; // 自动装箱
boolean anotherPrimitiveBool = objectBool; // 自动拆箱

Java中并没有所谓的0为假,非0为真。 

引用数据类型String,类,接口,数组等……

5.String类型

5.1

String类型可以进行拼接如:

public static void main(String[] args) {
        String a="hello";
        String b="world";
        System.out.println(a+b);
    }

打印结果为helloworld

我们可以进行一些格式的输出:

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

 

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

 

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

 

 相信聪明的你一眼就能看出打印的结果啦!

5.2

int类型转化为Sting类型如下:

public static void main(String[] args) {
        int a=1234;
        String s=a+"";
        System.out.println(s);
    }

这样打印出的1234就是一个字符串啦! 

String转为int呢?

只需要用包装类加valueOf  如下:

public static void main(String[] args) {
        String v = "1234";
        int ret = Integer.valueOf(v);
        int ret2 = Integer.parseInt(v);
        System.out.println(ret);
        System.out.println(ret2);
    }

用parseInt也是同样效果! 

 

 
二.运算符

 

1.算术运算符 /   %

加减乘除都是小学生的知识了,这里我们对除法和取模做一些分析。

public static void main(String[] args) {
        System.out.println(5/0);
    }

 除数不能为0,否则会出现算数异常

 %

public static void main(String[] args) {
       
        System.out.println(5%3);
        System.out.println(-5%3);
        System.out.println(-5%-3);
        System.out.println(5%-3);

    }

 

与C语言不同,Java中取模可以是小数!

System.out.println(11.5%2.5);

2.增量运算符+=

在Java中  增量运算符相当于帮你强转了!

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

3.关系运算符 ==   !=

关系运算符还有大于小于等,这里不做列举。

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

 

4.逻辑运算符

逻辑运算符主要有三个: &&  ||   ! ,运算结果都是 boolean类型。与C语言逻辑类似,都会出现短路,这里不做详细介绍。

5.重点:位运算符

位运算符主要有四个: &   |   ^     ~  ,除 ~ 是一元运算符外,其余都是二元运算符。

5.1   & 按位与

若两个数的二进制位都为1,则结果为1,否为0;

public static void main(String[] args) {
        int a=12;
        int b=5;
        System.out.println(a&b);
    }

 

&也可以当作&&使用,但它不会发生短路,下文的|也类似。

5.2  | 按位或

若两个数的二进制位都为0,则结果为0,否则为1;

5.3  ^按位异或

若两个数的二进制位相同则为0,否则为1;

5.4 ~按位取反

顾名思义

6. 移位运算

6.1左移 <<

二进制位最左侧位丢弃, 最右侧补 0.

6.2右移>>

二进制位最右侧位丢弃, 最左侧补 符号位.

6.3无符号右移 >>>

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

7.

好了你已经学会了,动手看看这些题目吧!、

1.求两个数二进制不同的位数

例如 19与9

法一:

利用按位异或,两数按位异或的值的二进制位中1的个数就是不一样的个数!

public static void main(String[] args) {
        int a=19, b=9;
        int count = 0;
        int n = a^b;
        for (int i = 0; i < 32; i++)
        {
            if (((n >> i) & 1) == 1)
                count++;
        }
        System.out.println(count);
    }

法二:

public static void main(String[] args) {
        int m=19;
        int n=9;
        int tmp = m^n;
        int count = 0;
        while(tmp!=0)
        {
            tmp = tmp&(tmp-1);
            count++;
        }
        System.out.println(count);
    }

 

2.打印整数二进制的奇数位和偶数位

例如19

public static void main(String[] args) {
        int num=19;
        for(int i=31; i>=1; i-=2)
        {
            System.out.print((num>>i)&1);
        }
        System.out.printf("\n");
        for(int i=30; i>=0; i-=2)
        {
            System.out.print((num>>i)&1);
        }

    }

 

3.还想了解其他题目可以关注小编!鲤鱼王打挺-CSDN博客给小编多多支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值