最近面试遇到的一些问题,整理

String类型的对象是不可变的,比方说String aa="11"; 想要修改aa的值,用“+”连接一个新的,比方说+2,其实并没有修改aa的值,而是在内存空间中新建了一个对象,对象的内容是“112”

String s1=new String ("aa");

String s2=new String ("aa");

两者的内存地址是不同的,不管字符串池中有没有aa的字符串常量,都会重新分配一个新的内存空间。

 

int类型的比较,比方说==,int a=11;int b=11;a==b 结果为true

对于基本数据类型(byte,short,char,int,float,double,long,boolean)来说,他们是作为常量在方法区中的常量池里面以HashSet策略存储起来的,对于这样的字符串 "123" 也是相同的道理,在常量池中,一个常量只会对应一个地址,因此不管是再多的 123,"123" 这样的数据都只会存储一个地址,所以所有他们的引用都是指向的同一块地址,因此基本数据类型和String常量是可以直接通过==来直接比较的。

另外,对于基本数据的包装类型(Byte, Short, Character,Integer,Float, Double,Long,  Boolean)除了Float和Double之外,其他的六种都是实现了常量池的,因此对于这些数据类型而言,一般我们也可以直接通过==来判断是否相等
————————————————

传基本类型变量和引用类型变量作为形参的时候,要注意,只是值的传递,相当于值的copy,基本类型copy一份传给形参,等方法结束后,复制的形参出栈,值还是原来的。引用类型传递的是地址的值,等方法结束后,栈中对象的属性值已经变了。 注意区分两者。

jvm主要分为栈、堆、方法区、寄存器区、本地方法区。

栈内存主要存放一些基本类型的局部变量

堆内存存放一些引用类型的数据,像对象这些

方法区存放静态变量、常量和类的一些信息(比如说类的属性和方法)

---------------------------------------
部分转载别人,已经注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值