首页 > 基础资料 博客日记
20220723_第七小组_张红睿_Java帝国
2023-08-01 18:32:27基础资料围观281次
本篇文章分享20220723_第七小组_张红睿_Java帝国,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识
Java帝国与C++帝国的一次会谈
概要:关于Java与C++的内存机制问题。
首先举一个例子:(关于“++”问题的一个例子)
Java代码:
public static void main(String[] args) {
int num = 50;
num = num++ * 2;
System.out.println("num: " + num);
}
相信了解Java的朋友们一定知道,代码运行结果为num: 100.
但是在C++中同样的代码的运行结果却是:
C++代码:
int main(){
int num = 50;
num = num++ * 2;
cout << "num:" << num << endl;
system("pause");
return 0;
}
所以,同样的代码为什么会出现两种结果呢?
首先肯定的是,后缀++运算符肯定是先用后加的原则,所以++是在乘2之后执行的。
这里可能会有人问Java代码中的++到底有没有执行,如果执行的话为什么结果是100而不是101?所以看下面的代码:
public static void main(String[] args) {
int num = 50;
int m = num++;
System.out.println("num: " + num);
}
下面是运行代码过程中的调试结果:这里使用Integer是方便看变量的地址。
代码运行到①处时,num的在栈中的地址为683,地址对应的值为50;
代码运行到②处时,num的地址变成了684,且对应值为51,而m对应的地址为值50的683, 即m的地址指向了之前num所在的地址。
这意味着在Java中改变引用对应的值时,并不像C++一样直接改变地址中的值,而是改变变量(对象)的引用,即改变对应的地址。
下面看C++的代码和运行结果:
可以看到在程序的运行过程中,变量num的地址并没有因为被赋值而改变,而是直接改变了变量地址对应的值。
这便是C++与Java在变量存储机制上的区别:
Java中改变变量的值是改变对应的引用(地址),而C++中是直接改变变量地址对应的值,而不改变地址。
再来看一开始的Java例子:
这也是为什么Java比较耗内存的原因。
文章来源:https://www.cnblogs.com/blog-J/p/16517241.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: