Java引用和C++引用区别:

public class Tester{
public static void main(String[] args){Integer var1=new Integer(1);Integer var2=var1;doSomething(var2);System.out.print(var1.intValue());System.out.print(var1==var2);
}
public static void doSomething(Integer integer){integer=new Integer(2);}
}

答案是:1true

Java的引用在使用上其实是类似于C++指针的用法,相当于通过一个变量存储实际对象的地址。除了基本数据类型,其他类型都是通过引用来传递的。

C++的引用则是给现有的变量取别名,2者是同一个对象,只是名称不同,修改了引用变量的值,原先变量的值也会跟着改变,引用变量一旦指定了是哪一个对象的引用后,就不能更改了。

上题的逻辑是,调用doSomething时,是新建了一个Integer integer,其指向var2所指向的那个栈中的1,然后在函数体里面new Integer(2)即在栈中新建了一个为2的值,integer指向它,但是var2是不受影响的,仍然指向栈中的1。因为这里是传的是包装类类型,属于引用调用,传过来是的原来引用变量的copy值,其指向原来的地址。如果是改变它指向的地址的内容,会影响到原有的值,但是如果是new一个新对象,然后让传过来的引用变量copy值指向这个新对象,并不会影响到原来的引用,这时相当于另创建一个引用。另外如果形参基本类型,则是传值调用,完全不会影响到原来。可以参考Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?

equal是值的比较
==是引用的比较

上述内容转自https://www.cnblogs.com/csuer/p/4620845.html

C++引用和指针区别:

C++引用占用不占空间意思就是不占对象空间,不表示不占指针的少量空间。可以看成指针常量,引用则总是指向在初始化时被指定的对象,以后不能改变。C++中指针可以为空,引用不能为空,因此引用的效率更高。


string s1("Nancy");
string s2("Clancy");
string& rs = s1; // rs 引用 s1
string *ps = &s1; // ps 指向 s1
rs = s2; // rs 仍旧引用s1,
// 但是 s1的值现在是
// "Clancy"  因为rs=s2相当于 s1=s2,是将s2的内容赋值给了s1
ps = &s2; // ps 现在指向 s2;
// s1 没有改变
int a = 1;
int &refence_a = a;
int b = 2;
&a = b;           // error,一个引用在初始化后就固定下来,不能再变化.

下面以swap例子说明c++指针和引用的区别

//swap以指针为参数,交换指针
void swap(int *i,int *j){int *temp;temp=i;i=j;j=temp;
}
int main(){int x=3,y=4;int *p=&x,*q=&y;swap(p,q);//swap(&x,&y);等价于上面两行printf("%d  %d",x,y);//3,4 传递的是指针的copy值,printf("%d  %d",*p,*q);//3,4 在函数中改变指针不会影响到原来的指针}
//swap以指针为参数,但是交换指针指向的内容
void swap(int *i,int *j){int temp=*i;*i=*j;*j=temp;
}
int main(){int x=3,y=4;int *p=&x,*q=&y;swap(p,q);//swap(&x,&y);//等价于上面两行printf("%d  %d",x,y);//4,3 传递的是指针的copy值,//但是copy值也是指向变量的地址//可以对变量的内容进行操作
}
//swap以引用为参数,交换引用
void swap(int &i,int &j){int temp=i;i=j;j=temp;
}
int main(){int x=3,y=4;swap(x,y);printf("%d  %d",x,y);//4,3 传递的是变量的引用,也就是别名//引用改变时,原变量内容也跟着改变
}

Java引用和C++引用相关推荐

  1. java强引用弱引用_Java 的强引用、弱引用、软引用、虚引用

    1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object(); // 强引用 当内存空间 ...

  2. 传递字符串_一道经典面试题:字符串在Java中如何通过“引用”传递

    这是Java的一个经典问题. stackoverflow上也有很多类似的问题,有很多不正确/不完整的答案. 如果你想的不多,问题很简单. 但如果你多想想,可能会很困惑. 一.一个有趣且令人困惑的代码片 ...

  3. java的虚引用_你不可不知的Java引用类型之——虚引用

    定义 虚引用是使用PhantomReference创建的引用,虚引用也称为幽灵引用或者幻影引用,是所有引用类型中最弱的一个.一个对象是否有虚引用的存在,完全不会对其生命周期构成影响,也无法通过虚引用获 ...

  4. Java 四种引用类型:强引用、软引用、弱引用、虚引用

    以前学习强软弱虚引用的时候,只是走马观花看看博客,并没有自己写代码去实践.去证明,导致每次看完后,过不了多久就忘了,后来下定决心,一定要自己敲敲代码,这样才能让印象更加深刻,古人云:纸上得来终觉浅,绝 ...

  5. java 静态内部类 弱引用_Java基础 强引用、弱引用、软引用、虚引用

    前言 在ThreadLocal源码中,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc.Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决 ...

  6. 理解Java中的弱引用(Weak Reference)

    理解Java中的弱引用(Weak Reference) 本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限, ...

  7. java对象的强引用,软引用,弱引用和虚引用

    java对象的强引用,软引用,弱引用和虚引用 标签:              javaoutofmemoryerror生活虚拟机jvmjdk 2011-05-05 21:00             ...

  8. 你知道Java 8 的方法引用吗

    1. 前言 Java中的方法引用,很多同学都见过但却叫不出名字甚至不太会用,在这篇文章中,我们将看到什么是方法引用以及如何使用它. 2. 方法引用的使用场景 我们先来看看方法引用的使用: new Ra ...

  9. 弱引用使用场景桌面_吃透Java基础十五:强引用、软引用、弱引用、虚引用

    本文首发CSDN博客地址:https://blog.csdn.net/u013277209?viewmode=contents 前言 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就 ...

  10. 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 )

    文章目录 一.Java 虚拟机内存分区 二.垃圾回收机制 三.引用计数器算法 ( 无法解决循环引用问题 ) 一.Java 虚拟机内存分区 Java 虚拟机内存分区 : 所有线程共有的内存区域 : 堆 ...

最新文章

  1. Netty源码分析第1章(Netty启动流程)----第4节: 注册多路复用
  2. H3C 路由器配置console密码登录[学习]
  3. 腾讯web前端招聘条件汇总
  4. c语言lnk1168无法打开exe,跪求大佬帮帮看看LINK : fatal error LNK1168: 无法打开 F:\windows程序设计\窗口\......
  5. 牛客网【每日一题】7月31日题目精讲—兔子的区间密码
  6. rdd数据存内存 数据量_大数据开发-Spark调优常用手段
  7. 别慌,不就是跨域么!
  8. php键名相加,php二维数组相同键名相加实例
  9. 【算法导论第13章】红黑树
  10. Android 记忆卡片游戏 记忆力 Android游戏 Android记忆卡片游戏源代码
  11. 详解如何实现斗鱼、B站等全局悬浮窗直播小窗口
  12. 邮件服务器突然很慢,原因探究与处理
  13. python 建筑计算_写给潘石屹的 Python 自学指南
  14. 【转】Element-UI中上传的action地址相对问题
  15. win11 JDK环境变量的配置
  16. 最简单的方法教你装matpower
  17. 手机python安装教程_Python安装不用愁,Python安装教程来了(2021)
  18. 臀部无论大小,翘起才是王道。
  19. 开放式耳机的颠覆之作!南卡OE Pro新皇降临!佩戴和音质双重突破
  20. sql server 2008 r2 忘记sa密码, 没有window账户登录, 解决办法

热门文章

  1. 如何微信多开(PC端微信多开)
  2. 文本长度过长时隐藏并显示省略号“...”,以及鼠标停留时悬浮显示全部文本(兼容IE)
  3. dump文件,windbg
  4. tensorflow框架精细讲解(一)
  5. 常用Source Insight快捷键
  6. Java Class类文件的结构
  7. 字符串变量string
  8. python3-函数与参数以及空值
  9. Python爬虫入门教程07:腾讯视频弹幕爬取
  10. 科技作者吴军:不用低效率的算法做事情