JavaSE——常用类、类型转换

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

不可变字符串String可以让它可变,只是不可变是为了能进行程序上的优化。并不是真的不可变,反射机制可以让它变。

可变字符串StringBuffer和StringBuilder它们两个其实是一家人,只是有一部分不一样。

它们的继承结构是一样的,所继承的父类都是同一个。接口也是一样的。构造器也没什么不同,结构都是一样的。不同的是 StringBuffer的每个方法上都有synchronized关键字——同步关键字,StringBuilder没有同步关键字。

可变字符串,可以往里追加,也可以用insert往里插入,还有delete删除,这些都要对原本的字符串进行修改。

如果有多个任务一起使用StringBuilder修改数据,那这里面的数据就肯定会遭到破坏。所以StringBuilder没有预料到这个问题。大家共同使用一个可变字符串的时候就会造成可变字符串的混乱。

在这方面StringBuffer里面的所有方法都是同步的,也就是说一次只允许一个任务进去操作,其他的不允许操作。必须要等这个操作完下一个才能进去。

StringBuffer一次只允许一个任务进去访问,必须要等这个操作完下一个才能进去,不允许多任务访问。而StringBuilder就允许多任务访问。这就是它们的不同之处。

加上同步关键字就是加上了访问权利,必须排队访问才行。这就是StringBuffer的安全操作。

如果一个线程操作字符串,就用StringBuilder

如果多线程操作字符串,就用StringBuffer

StringBuffer是同步安全,StringBuilder是非同步安全、非线程安全。今后StringBuffer用得多。

封装数据类

在jdk1.5以前,封装数据类我们称为工具类——对数据类型的帮助:类型转换 在jdk1.5及以后封装数据类型也可以当作数据类型使用

( 1.4代码规范

Integer是int类型,不能当作int去使用呢。因为i是一个类,而100属于基本数据类型int,基本数据类型不能给一个对象变量

但是String字符串就可以。因为String字符串是在很早的jdk版本上就进行了优化,就是一个对象给了s。

基本数据类型不能给i。因为在jdk1.4的时候,做到一些相应的包装。所以只能new一下int,这是一种办法。

还有一个办法就是可以通过Integer里的valueOf()方法,它也可以帮你优化一下,但是这个方法需要在1.5才能用,1.5才有这个方法。

1.4要想用Integer就必须得new。封装数据类型就是一个工具类,没有办法直接接收基本数据类型的给值。要想拿它来寄存数值,必须new一下才可以把100存放进去。 )

( 10代码规范 1.5以后,做一些改变,把所有的封装数据类型都看作基本数据类型去对待。

看作int类型,直接可以等于100。

这种写法在后台编译之后的写法是这样子的:

) 在jdk1.5以前,是不可以这样赋值的;在jdk1.5以后就可以直接赋值。

这个在数据类型中就叫做自动装箱。

自动装箱——用封装数据类型接收基本类型数据,它会自动装箱。

基本数据类型int i2,i是对象类型,对象是肯定给不了基本数据类型的,就算用强制类型转换,也给不了。

那为什么这样子就可以呢?因为这里面有个自动拆箱的功能。

自动拆箱,真正来说,它调用的是里面的一个intValue()方法,自动拆箱,拆给了它。

自动拆箱——基本数据类型接收封装数据类型对象,会自动调用封装数据类型的方法进行拆箱操作

只有它有自动装箱和自动拆箱。

在Java1.5以后,它推荐大家今后不要用基本数据类型,使用封装数据类型。但其实封装数据类型占用的内存要比基本数据类型大,我们不太推荐这样去使用。如果万事万物皆对象的话,那就应该用封装数据类型。但用封装数据类型做计算的时候,应该调用它里面的方法去计算。如果还是用最基本的运算符去进行运算的话,还会牵扯到自动拆箱的功能。

它里面还有一个优化功能:

按照原理来说,这两个应该是不同的对象,但是结果发现这两个对象是一样的。那就说明,它的内存是一致的。

用等于号比较对象,除了基本数据类型,所有的都是按地址比较。

它这里面调用的是valueOf方法

这个方法里面写了一个判断。传进来的 i 是否大于等于-128,小于等于127。如果是在这个范围内,就从这个池里取出一个Integer的对象出来。如果不是在这个池里,就直接new一个Integer对象出来。100是池里取出来的对象,130不在这个范围内所以就是new出来的一个对象。

这两个是从池里面拿出来的对象,所以内存是一致的。

而它们两个在池里面没有取到对象,因为没有在这个范围内,所以new出来的两个对象,内存就不相等,打印出了false

它如果和基本数据类型混在一起就会自动拆箱。自动调intValue()方法转换成 int 基本数据类型,转换成基本数据类型再和130做比较。因为基本数据类型的判断是可以用等于号去判断。所以它自动拆箱,拆出130,130等于130。

注意:封装数据类型比较,应该使用equals,因为它们是对象

类型转换

字符串转int

所有的封装数据类型都有方法可以将字符串变成它们对应的基本数据类型

valueOf转出来的是Integer对象。这是专门用来自动装箱的。

给不了字符串

转到二进制能加密,能做很多相应的操作。

Integer可以将十六进制、八进制、二进制转成十进制,也可以将十进制转成二进制、八进制、十六进制,以及三十二进制。这就是Integer工具类的好处。

二进制转十进制

(不超过32位,因为int存储的最大位数就是32位)

八进制转十进制

十六进制转十进制

在传输数据的时候,很大的数值它牵扯的字符串有点长,就可以直接把它压缩成十六进制。一个数值压缩成十六进制,字符串就变短了。减少了占位,减少了空间存储。

所以进制转换的好处也是压缩了存储空间。传输的时候,传输数据也小了。

还有一种就是将这个文本转成二进制,然后再分析里面的相应信息。

需要把这10个设备的状态情况发送给服务器,通过一个主机发出去。

这10个设备的状态组建成一个字符串

这个字符串太长了,影响网络传输,去掉序号,只留下表示状态的数字,按顺序第一个就是第一个设备。再去掉逗号,还有10的字符串长度。如果今后设备多起来,字符串就会越来越长,这样描述状态就不太好。

8位    一个字节

3个字节描述了12个设备的状态

存储状态可以用位存储,节约空间。

所以进制转换是很有必要的,在这里用到位进行描述,然后转成字节,再解析就行了。

例题

截取,每8个转成1个字节

转成字节

需要找到Byte类型去转换字节

字符串转字节,二进制转

通过这种方式可以节约存储空间。以前是用文本存储的,浪费空间。用字节存储,一个字节8位。这就是状态描述的一种做法。 不管是什么进制转换,都是有很大的用处的。第一是缩短了存储,第二就是可以进行相应的加密。

MD5加密

加密后形成的密文不可解析,不能还原

比方说你的密码存储在服务器上,不可能明文密码给人家看。有人维护服务器的时候一看就知道了你的密码,这就很不保险。保险的办法就是把你的密码用MD5加密,他就算看见你的MD5密文,他也还原不出你的密码。

登录验证的时候,需要再把你输入的密码加密成MD5,看一下两个密文是否一致。如果两个密文是一致的,那密码就是正确的;如果两个密文不是一致的,那密码就不正确。

金融系统里的那些密码都是要拿MD5加密的,而且是MD5嵌套加密法。就算是一个数据维护员也看不到客户的密码,拿到的是密文,密文是翻译不出密码的。防止技术人员盗用人家的密码。

MD5能加密不能解密

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,078评论 1 44
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,293评论 18 399
  • 我害怕时间不停流逝,而自己却无所事事。你要问我怎样才不叫无所事事,我只能说那是一种让你觉得生命的历程“时有所值”的...
    宋小song阅读 478评论 1 1
  • 梦想可变现,唯有时间知道—— 01时间的秘密 这是公开的秘密:上天对我们唯一公平的就是时间。一年有365天,一天有...
    柠檬江江阅读 229评论 0 3
  • 想过一天自己的生活,当请了一天假时,才发现没有目的!不知道自己想去哪,想去公园一个人没意思,想去看电影一个人没意思...
    冰中美人鱼阅读 178评论 0 0