`
sunmiracle
  • 浏览: 14821 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

引用作为参数传递时容易搞错的两个例子

 
阅读更多
//例子1:

class Value
{
public int i = 15;
}

public class PassRefrence
{
public static void main(String argv[])
{
PassRefrence t = new PassRefrence();
t.first();
}

public void first()
{
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.println(v.i);

}

public void second(Value v, int i)
{
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.println(v.i + " " + i);

}
}

输出结果为:
15 0
20


输出结果为:
15 0
20

参数传到一个方法中后,在方法中对参数值的改变不会影响原来的值,对primitive和object refrence 都一样。对引用来说就是,在方法中又new 了一个对象并把该对象的引用赋给传递进来的参数,这样并不影响方法外的引用所指向的地址。

另外:

//例子2:

class Test
{
public static void main(String [] args)
{
Base b = new Subclass();
System.out.println(b.x);
System.out.println(b.method());
}
}

class Base
{
int x = 2;
int method()
{
return x;
}
}

class Subclass extends Base
{
int x = 3;
int method()
{
return x;
}
}

输出结果为:

2

3

The rule for accessing methods and variables in a class hierarchy is as follows:
-the object reference is used when accessing variables (so the value of b.x is therefore 2).
-the underlying object is used when accessing methods (so the method called is actually the method defined in Subclass, and in Subclass, x = 3).

用父类或接口调用子类的覆盖方法时,根据动态绑定确定调用哪个子类的方法,但调用成员变量时,直接访问父类或接口的成员变量

输出结果为:

2

3
分享到:
评论

相关推荐

    Java中的值传递和引用传递

    当一个变量为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递。  值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值  引用传递的特点:方法内部对传...

    python-引用传参.docx

    因此,当我们将一个变量作为参数传递给函数时,实际上是将这个变量所指向的对象的引用传递给了函数。 下面我们来看一个例子: ``` def change_list(list): list.append(4) my_list = [1, 2, 3] change_list(my_list)...

    java的传值与传引用详解

     这里,a 和 b 是不同的两个引用,我们使用了两个定义语句来定义它们。但它们的值是一样的,都指向同一个对象 "Hello"。也许你还觉得不够直观,因为 String 对象的值本身是不可更改的 (像 b = "World"; b = a; 这种...

    C++指针作为函数的参数进行传递时需要注意的一些问题

    下面分析这样两个例子; 要求:定义并初始化两个字符串变量,并执行输出操作;然后调用函数使这两个变量的值交换,并且要求被调函数的传值通过传递指针来实现。程序1.1 代码如下:#include<iostream>#include<string>...

    C++对象和指针的引用

    该例子与上面的例子输出相同的结果,只是调用时的参数不一样。 this指针 this指针是一个隐含于每一个成员函数中的特殊指针。它是一个指向正在被该成员函数操作的对象,也就是要操作该成员函数的对象。 当对一个...

    关于C++中值传递和引用传递的总结

    举个单一类(不存在继承关系)的例子,在函数以值方式传递对象,并要求返回对象时,对象会调用两次拷贝构造函数,分别是在实参赋值形参和返回对象时进行调用。因为函数内部参数在内存栈中进行分配,所以当函数返回时...

    pybind11 python调用c++拓展的例子

    采用pybind11模块来实现python调用c++程序的两个例子,具体可以看:文章:https://blog.csdn.net/u011622208/article/details/111302047

    Inplace:允许 Matlab 变量通过引用而不是通过允许就地修改的值传递。-matlab开发

    Inplace 是一个 Matlab 包,用于处理按引用而不是按值传递的矩阵和向量。 这个包允许就地修改函数的变量。 以前,这种行为在 Matlab 中是不可能的。 要安装,请参阅文档页面的安装部分: ...

    测量程序编制 - python 96面向对象-类的专有方法.pptx

    面向对象——类专有方法;__str__ 方法 __str__ 是一个类的方法,在打印类对象...主要区别在于参数传递上的区别,实例方法悄悄传递的是self引用作为参数,而类方法悄悄传递的是 cls 引用作为参数。;下面实例展示三种方法

    在一小时内学会 C#(txt版本)

    和 C++ 一样,有一个主函数作为你程序的入口点。C++ 的主函数名为 main,而 C# 中是大写 M 打头的 Main。 类块或结构定义之后没有必要再加一个半角分号。C++ 中是这样,但 C# 不要求。 命名空间 每个类都打包于一...

    python面试题100.docx

    1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def fun(a): a = 2 fun(a) print(a) # 1 代码二: a = [] def fun(a): a.append(1) fun(a) print(a) # [1] 所有的变量都可以理解是内存中一个...

    使用Java Native Interface调用本地C++代码.txt

    在这个例子中,我们使用...注意,我们在实现函数中使用了`JNIEnv *env`和`jobject obj`这两个参数,它们分别表示JNI的环境指针和当前对象的引用。这些参数可以让我们方便地在Java和C++之间传递数据和调用其他本地方法。

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

     在上面的例子中,需要两个环境变量信息。而在1.x版本中,由于静态分配环境变量,多线程技术是不被允许的(只有一个线程可以用这个环  境变量调用远程方法或处理请求信息)。  4 准备工作  要开始用gSOAP创建一...

    新手学习C++入门资料

    上面例子中,第一次调用show()函数时,让编译器自动提供函数原型中指定的所有默认参数,第二次调用提供了第一个参数,而让编译器提供剩下的两个,第三次调用则提供了前面两个参数,编译器只需提供最后一个,最后一...

    LuaBind 源码 (Lua增强库)

    1 介绍 LuaBind 是一个帮助你绑定C++和Lua的库....引用或常量引用作为函数的第一个参数.该函数的剩下的参数将在Lua侧可见,而对象指针将被赋值给第一个 参数.如果我们有如下的C++代码: struct A { int ...

    DWR.xml配置文件说明书(含源码)

    从java中传递null值到javascript是没有任何危险性的,所以DWR将这个作为默认的converter,所以你自己不用再把这个converter添加到配置文件的部分中去. 基本类型的converter转换int,boolean,double等.当然还包括对应的...

    java面试题及答案.doc

    29. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 30. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此...

    详解C#中的out和ref

    要想充分理解C# out和ref,必须先明确如下两个概念(对值类型与引用类型掌握比较好的,可以跳过“一、明确两个基本概念”) 一、明确两个基本概念 值类型:  定义:通过值的方式来传递,即实际参数向形式参数传递...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    两个车轮和齿轮的数目等)和行为(刹车、加速、减速和换档等)。 其次,我们再来看看软件对象。软件对象是现实世界对象的模式化产物,他们也有状态 和行为。软件对象把状态用数据表示并存放在变量里,而行为则用方法...

    aybook.cn_c++jiaocheng0105.rar

    2.8 函数的参数 2.9 输出选项 2.10 两个简单的命令 2.11 代码块 2.12 分号与定位 2.13 缩进编排 2.14 C++中的关键字 2.15 C++的标识符 2.16 标准C++库 第3章 基本数据类型 3.1 变量的声明 3.2 类型修饰符 3.3 字面量...

Global site tag (gtag.js) - Google Analytics