Java基础

1:传递

基本数据类型

整型:byteshortintlong

浮点型:floatdouble

字符型:char

布尔型:boolean

引用数据类型

数组

接口


2:在创建数组对象时,是需要指明数组的长度的,所以数组在需要扩容时,需要一个遍历copy


3String,用的是char数组实现的。

参考:https://www.cnblogs.com/xiaoxi/p/6036701.html

==在比较对象时,看两个引用对象地址是否一致,一致才返回true

equals:看具体对象的equals重写逻辑。

举例:String对象的比较,可能出现equals返回True==返回false


总结:

==返回true如果两个引用指向相同的对象,equals()的返回结果依赖于具体业务实现

字符串的对比使用equals()代替==操作符

Stringc = new String("chenssy");

new关键字一定会产生一个对象chenssy,同时这个对象是存储在堆中。所以上面应该产生了两个对象:保存在栈中的c和保存堆中chenssy。但是在Java中根本就不存在两个完全一模一样的字符串对象。故堆中的chenssy应该是引用字符串常量池中chenssy。所以cchenssy、池chenssy的关系应该是:c--->chenssy--->chenssy

java字符串常量池和java堆不是一个东西。

Stringa = "chenssy";

像上面这样,a指向的是java字符串常量池中的数据,没有指向堆。

1)单独使用""引号创建的字符串都是常量,编译期就已经确定存储到StringPool中;

2)使用newString("")创建的对象会存储到heap,是运行期新创建的;

new创建字符串时首先查看池中是否有相同值的字符串,如果有,则拷贝一份到堆中,然后返回堆中的地址;如果池中没有,则在堆中创建一份,然后返回堆中的地址(注意,此时不需要从堆中复制到池中,否则,将使得堆中的字符串永远是池中的子集,导致浪费池的空间)!这里有个问题是其实在传递参数时,newString("abc")中的字符串就已经已经放到StringPool中了,所以堆中的字符串就是子集。

3)使用只包含常量的字符串连接符如"aa"+ "aa"创建的也是常量,编译期就能确定,已经确定存储到StringPool中;

4)使用包含变量的字符串连接符如"aa"+ s1创建的对象是运行期才创建的,存储在heap中;

5)字面量"+"拼接是在编译期间进行的,拼接后的字符串存放在字符串池中;而字符串引用的"+"拼接运算实在运行时进行的,新创建的字符串存放在堆中。


6

https://mp.weixin.qq.com/s?__biz=MzIyMjYyMzg3MA==&mid=2247485693&idx=1&sn=bfe33b68a6f9966fde96c1aa34a91de2&chksm=e82be9ecdf5c60faa1f240f49e0c40240c1b697708cceb77998e466a978dd1f3185b5415e1a3&scene=0#rd


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值