初识java数据类型以及运算符(力作)(2)

本文详细介绍了Java中的基本数据类型(如int、long、double、float、char、byte、short和boolean),包括它们的初始化、存储空间和取值范围。此外,还讨论了字符串类型、运算符的使用、运算符优先级以及字符串常量池的概念。作者强调了在实际编程中理解和掌握这些基础知识的重要性。
摘要由CSDN通过智能技术生成
  1. 基本语法格式和创建 int 变量基本一致, 只是把类型修改成 long

  2. 初始化设定的值为 10L , 表示一个长整型的数字. 10l 也可以.

  3. 使用 10 初始化也可以, 10 的类型是 int, 10L 的类型是 long, 使用 10 L 或者 10 l 更好一些.

: long类型,在java中,占8个字节。取值范围是 -263 ~ 2 63 - 1.

3、双精度浮点型

double n = 3.14;

System.out.println(n);

:double占8个字节。且在内存中的存储方法,遵循IEEE754标准(和C语言一样)。用有限的空间去表示无限的小数,势必会造成精度的损失。

4、单精度浮点型

float n = 3.14F; //注意,float后面的赋值,必须要加F/f加以区分。jvm默认的浮点数是double,所以需要加F区分

System.out.println(n);

: float占4个字节,因为占得空间比double小,所以没有double的精度高,存储方式还是遵循IEEE754标准,所以在使用中,一般还是推荐使用double类型的浮点数。

5、字符型

char ch = ‘酷’; //值得注意的是,java中的char,跟C语言的,完全不一样。这里占2个字节

System.out.println(ch);

: java中的char类型,与C语言中的不一样。java中的char占两个字节,且编码方式,采用Unicode编码格式。C语言采用的ASCII码。

java中的char,取值范围是 0 ~ 65535。这里需要知道,这是java中的一个无符号数。像java中的其他类型都是有符号数

编译时: 如果出现乱码的情况而编译不过去,只需在换成UTF-8的编码格式即可。或者命令行编译时:javac * .java -encoding utf-8

6、字节型

byte value = 0;

System.out.println(value);

  1. 字节类型表示的也是整数. 只占一个字节, 表示范围较小 ( -128 -> +127 )
  1. 字节类型和字符类型互不相干

7、短整型

short n = 10;

System.out.println(n);

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

8、布尔类型

boolean flag = true;

System.out.println(flag);

  1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.
  1. Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用 法。
  1. Boolean类型所占空间,JVM标准并没有定义。有的书写的是1个字节,有的书写的是1个bit位。

总结 :以上8种就是基本的数据类型。每个对应的包装类以及大小范围如下:

| 数据类型 | 包装类 | 所占空间(字节) | 取值范围 |

| :-: | :-: | :-: | :-: |

| byte | Byte | 1 | -128 ~ 127 |

| short | Short | 2 | -32768 ~ 32767 |

| char | Character | 2 | 0 ~ 65535 |

| int | Integer | 4 | -231 ~ 231 - 1 |

| long | Long | 8 | -263 ~ 263 - 1 |

| float | Float | 4 | -3.4E+38 ~ 3.4E+38 |

| double | Double | 8 | -1.8E+308 ~ 1.8E+308 |

| boolean | Boolean | 未定义 | true、false |

image-20210729183019217

图中有6个黑色箭头,表示无信息丢失的转换; 另外3个红色箭头,表示可能有精度损失的转换。

img

9、字符串类型

String s = “I’m too handsome”;

System.out.println(s);

  1. Java 使用 双引号 + 若干字符 的方式表示字符串字面值.
  1. 和上面的类型不同, String 不是基本类型, 而是引用类型.
  1. 字符串中的一些特定的不太方便直接表示的字符需要进行转义
字符串类型与整形之间的转换:

//整形 -> 字符串

int n1 = 100;

String s1 = String.valueOf(n1); //需要转换成哪一类,就使用哪一类的包装类,包装类里有相应的方法

String s = String.parseInt(n1); //这个方法(函数) ,也可以转换

//字符串 -> 整形

String s2 = “2021”;

int n2 = Integer.valueOf(s2);

字符串的+操作:

String s1 = “hello”;

String s2 = “world”;

String s3 = s1 + s2; //此时的加法,就是将s1和s2的字符串类型,拼接起来

System.out.println(s3);

image-20210729125316379

除此之外,字符串还能直接和整数进行拼接,如下:

int a = 20;

int b = 30;

String s = “chongqing”;

String res1 = a + b + s;

String res2 = s + a + b; //这两种输出,有区别吗?

image-20210729125647368

image-20210729130008387

这个问题就留个大家,好好想想,why?

不可变字符串:

String s = “I love you”;

String类没有提供修改字符串中某个字符的方法(函数), 如果希望将s字符串的内容进行修改为**“I love him”**,只能提取s字符串中的一些字符。

String str = s.substring(0, 6) + “him”; //提取“I love ”

上面这条语句,就将str赋值为了“I love him”;

由于不能修改Java字符串中的某个字符,所以在Java文档中将String类对象称为 不可变的。虽然你不能修改该字符串的某个字符,但是你可以修改s字符串,重新指向一个新的字符串。就如同,原先s字符串指向 “重庆”,你可以让它指向 “成都”。

问题:这样做,是否会降低运行效率?

答案:从不同的角度看: 1、单单从效率上来看,这样做确定时会影响效率,需要拼接一个新的字符串。 2、但是不可变字符串有一个优先:就是编译器可以共享这些字符串。

判断字符串是否相等:

首先我们先看看如下代码是否正确:

String str1 = “hello”;

String str2 = “hello”;

System.out.println(str1 == str2); //true or false?

System.out.println(str1.equals(str2)); //true or false?

String str3 = “world”;

System.out.println(str1 == str3); //true or false?

System.out.println(str1.equals(str3)); //true or false?

image-20210729175955463

先看str1 == str2; 两个字符串的内容都是“hello”,所以在Java中,这两个字符串是存储在字符串常量池, 在这个常量池,所以可以进行共享

字符串常量池: 字符串常量池的优点就是避免了相同内容的字符串的创建,节省了内存,省去了创建相同字符串的时间,同时提升了性能;另一方面,字符串池的缺点就是牺牲了JVM在常量池中遍历对象所需要的时间,不过其时间成本相比而言比较低。

所以str1和str2的引用,都是来自字符串常量池的同一块内存地址。直接判断str1 == str2,其实就是判断的引用是否相等。

下一个就是str1.equals(str2); equals方法,是用于判断两个字符串内容是否相等的,跟C语言中的strcmp函数,是一个意思。只不过equals方法返回的是布尔类型。

image-20210729181057024

所以第2个print语句,输出的就是true;

最后面的两个print,想必大家已经知道为什么了吧。 我们就不在讲解了。

四、运算符


image-20210729194511633

java中的运算符,和各大程序设计语言的运算符差不多,我们重点说一下几个点:

  1. 除法中。除数不能为0,不然会抛出算术异常

  2. 复合运算符:例如+=,有隐性强制类型转换,如下

int a = 10;

short b = 20;

b += a;

b = (short)(a + b); //这两个式子等价

  1. “>>” 与 ">>>"的区别: ">>“称为右移运算符,右边的丢弃,左边空出来的位置,需要补符号位。 而”>>>"称为无符号右移运算符,也就是说,用这个的话,左边补的不是符号位,而是补0。例如:

int n = -1;

System.out.println(n >> 1);

System.out.println(n >>> 1); //这两个输出,有区别吗?

肯定是有的,好好想一想哦!!!

  1. 同一级别的运算符按照从左到右的次序进行计算(但右结合运算符除外,如下表所示)。例如 && 比 || 的优先级要高,所以表达式

a && b || c ,等价与于(a && b) || c。

又比如: a += b += c ,也等价于 a += (b += c)。因为 += 运算符是右结合性。

| 运算符 | 结合性 |

| :-: | :-: |

| [] . () (方法调用) | L -> R |

| ! ~ ++ – + (一元运算) () (强制类型转换) new | R -> L |

| * / % | L -> R |

| + - | L -> R |

| << >> >>> | L -> R |

| < <= > >= instanceof | L -> R |

| == != | L -> R |

| & | L -> R |

| ^ | L -> R |

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
t=“img” style=“zoom: 33%;” />

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

[外链图片转存中…(img-Gv6vybRN-1713540244611)]

[外链图片转存中…(img-E54h4O23-1713540244611)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值