java中内存分配的问题
java中内存分配的问题还是这个问题Stringa="123",Stringb="123",booleanc=(a==b)的值是true,既然==两边比较的是内存地址。那...
java中内存分配的问题
还是这个问题String a="123",String b="123",
boolean c=(a==b)的值是true,既然==两边比较的是内存地址。那么就是说a和b在一个内存位置了?什么意思啊?xiexie !
问题补充:有的朋友告诉我是比较的是内存地址。我觉得应该是指的是char型指针,哪位大侠能给个标准点的答案?第二,指针有没有内存?
还有个问题,比如成员变量int a=1,那么这个成员变量是不是被分配了内存而且在堆区呢?那么请问,如果类没有创建对象,就没有实例,那么这个成员变量是怎么存在的呢?千恩万谢!
大哥们能不能说清楚一下啊!最好先在自己的机器上跑一下!我也认为a和b是指针,但是==连接比较的是值还是内存呢?a和b到底有没有内存?千恩万谢!! 展开
还是这个问题String a="123",String b="123",
boolean c=(a==b)的值是true,既然==两边比较的是内存地址。那么就是说a和b在一个内存位置了?什么意思啊?xiexie !
问题补充:有的朋友告诉我是比较的是内存地址。我觉得应该是指的是char型指针,哪位大侠能给个标准点的答案?第二,指针有没有内存?
还有个问题,比如成员变量int a=1,那么这个成员变量是不是被分配了内存而且在堆区呢?那么请问,如果类没有创建对象,就没有实例,那么这个成员变量是怎么存在的呢?千恩万谢!
大哥们能不能说清楚一下啊!最好先在自己的机器上跑一下!我也认为a和b是指针,但是==连接比较的是值还是内存呢?a和b到底有没有内存?千恩万谢!! 展开
4个回答
展开全部
1.String在JAVA中不是基本数据类型,其实他是一个类类型。对String类型的数据用==比较是比较他们在内存中的地址。你可以把JAVA中的String定义的数据看成是在内存的有一个池子。“123”就创建在这个池中,下一次b=123,因为池中有123,所以JAVA不再创建123实例,而是把b直接引用到123.所以a和b的地址是相同的,就是内存中123的地址。所以boolean c=(a==b)的值是true。
2.在JAVA中没有“指针”的概念,“指针”是在C中的。
3.在JAVA中创建对象的实例是在堆上创建的,没有错误。举个例子:
public class A{
void set(){
……}
public static void main(String[] args){
A a=new A();
}
}
这里有一个类A,new A()是类的一个实例化,在堆上创建了一个类A的实例,A a是创建了一个类对象,A a=new A();是把类对象引用到类的实例上。你发现new A();这条语句在程序中是可以运行的。所以类的实例不一定总依赖于类的对象。
2.在JAVA中没有“指针”的概念,“指针”是在C中的。
3.在JAVA中创建对象的实例是在堆上创建的,没有错误。举个例子:
public class A{
void set(){
……}
public static void main(String[] args){
A a=new A();
}
}
这里有一个类A,new A()是类的一个实例化,在堆上创建了一个类A的实例,A a是创建了一个类对象,A a=new A();是把类对象引用到类的实例上。你发现new A();这条语句在程序中是可以运行的。所以类的实例不一定总依赖于类的对象。
展开全部
boolean c=(a==b)的值是true吗 确定吗 a和b的内存地址好像不一样呢
我觉得是false 哦 对应该是true 因为不是String a=new String("123") ;你的写法是直接把a和b指向同一个地址的
也就是说String a="123",这种方式下,如果内存中存在一个相同的字符串实例,则会直接将这个实例的引用赋给变量;而String a=new String("123") 这种方式则永远生成一个新的实例。
我觉得是false 哦 对应该是true 因为不是String a=new String("123") ;你的写法是直接把a和b指向同一个地址的
也就是说String a="123",这种方式下,如果内存中存在一个相同的字符串实例,则会直接将这个实例的引用赋给变量;而String a=new String("123") 这种方式则永远生成一个新的实例。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
String a="123",String b="123", boolean c=(a==b)
a==b 这明显是比较的值啊! 比较的是字符“123”不是a和b的地址。。。 已经声明的属性 内存里当然就有他们的位置了,但是都有自己对应的地址。
比如成员变量int a=1,那么这个成员变量是不是被分配了内存而且在堆区呢? 只要你声明了属性 那就会被分配内存的。是在堆里
a==b 这明显是比较的值啊! 比较的是字符“123”不是a和b的地址。。。 已经声明的属性 内存里当然就有他们的位置了,但是都有自己对应的地址。
比如成员变量int a=1,那么这个成员变量是不是被分配了内存而且在堆区呢? 只要你声明了属性 那就会被分配内存的。是在堆里
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
String a ="abc";这句话先在string pool中创建一个abc对象
String b ="abc";然后执行这句话,先去string pool中找有没有abc的对象,发现有 就直接返回abc。
所以a和b的内存地址是一样的
都是string pool中的地址
所以返回值是true。
String b ="abc";然后执行这句话,先去string pool中找有没有abc的对象,发现有 就直接返回abc。
所以a和b的内存地址是一样的
都是string pool中的地址
所以返回值是true。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询