Java引用和C++引用

 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 传递的是变量的引用,也就是别名
                                //引用改变时,原变量内容也跟着改变
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值