1,基本类型在内存中的存储形式。
2,对于
int a = 1;
int b = 1;
a==b 为true;的原理你赞同那种解释:
(1) a和b指向了同一个内存地址。
(2) java 对于基本类型的 == 操作与 对象类型有所区别,是比较值而不是比较地址。
2,对于
int a = 1;
int b = 1;
a==b 为true;的原理你赞同那种解释:
(1) a和b指向了同一个内存地址。
(2) java 对于基本类型的 == 操作与 对象类型有所区别,是比较值而不是比较地址。
解决方案 »
- java 泛型 如何克隆?
- exec(String[])调用系统命令时的参数urp?
- java聊天室的用户信息链表存储
- javabean無法執行
- 谁用Jericho HTML Parser,看看Source的public Element findNextElement(int pos, java.lang.String name)方法
- 关于反射
- Unix下面的URLEncoder.encode()不正常!怎么回事?高手来看看!多谢了!--在线等待!!!
- 高分相送!!!Swing中如何才能一个JPanel面板容器绑定在一个滚动条组件上,使得JPanel里的内容可以在窗口改变大小的时候能出现滚动条
- 请教如何通过LDAP协议访问AD?如果有现成的程序最好。
- 有谁知道如何使用SQL2000的JDBC驱动?100分
- 关于实例化的问题
- jtable空白的地方填充颜色
如果是(1) a和b指向了同一个内存地址。 那如果a改变了这个值 是不是 b也要跟着改变了?
String s1 = "abc";
String s2 = "abc";
呢?
==号比较对象类型用的是if_acmpne指令 比较栈顶两引用型数值
String s1 = "abc";
String s2 = "abc";
s1==s2肯定是if_acmpne
比较栈顶两int型数值大小 是什么意思。能详细说下 if_icmpne 的执行过程吗?
还有,基本类型在内存中的存储结构是什么:
1 基本类型就是引用的值。
2 它有独立的内存地址。不过按你的说法,好像是1的意思。
int b = 1;
if(a==b)
执行过程就是
1 常数1进操作数栈
2 操作数栈到变量a
3 常数1进操作数栈
4 操作数栈到变量b
----
5 把变量a压入操作数栈
6 把变量b压入操作数栈
7 调用if_icmpne比较栈顶两int型数值大小
int a=1;
int b=1;栈里就是2个1啊
1,基本类型在内存中的存储形式。
2,对于
int a = 1;
int b = 1;
a==b 为true;的原理你赞同那种解释:
(1) a和b指向了同一个内存地址。
(2) java 对于基本类型的 == 操作与 对象类型有所区别,是比较值而不是比较地址。
基本类型是在栈里,而对象是在堆里,栈里记录的是引用的值也即对象的地址值
所以你可以这么理解 都是比较的值,但这个值是压在栈里的值
基本数据因为直接压栈 所以比较的就是他们自己
而 对象的话 比较的是他们压在栈里的对象在堆中的地址值
所以如果两个引用相等的话他们就是指向的同一个对象
Sting是对象类型,对象类型存放的是地址,也就是s1和s2有各自的地址,该地址里存的是字符串"abc"的地址,比较的时候,从s1,s2两个地址里取出对应的地址来比较
"abc"是个常量字符串对象,为了优化系统资源,jvm中始终只存在一个不同的字符串常量,所以s1和s2引用的是同一个对象,即s1的地址里存的是常量"abc"的地址,s2的地址里存的也是常量"abc"的地址
如果把s2改为s2="bcd",这时jvm会生成一个"bcd"字符串常量对象,然后把该对象的地址存到s2的地址中
基本类型的变量持有原始值,引用类型的变量持有引用值
java虚拟机没有寄存器,指令集使用JAVA栈来存储中间数据.JAVA栈有一个个栈帧组成,栈帧由 局部变量区,操作数栈,帧数据区组成.
字节码的世界里不存在名称,只知道第几个变量 再根据占用的空间 计算出地址
你去翻下书,关于core java的.上面都写的很清楚
== 在比较基本数据类型的时候,比较的是值
equals才是地址.....
基本类型 有 equals方法吗?