JAVA在方法的末尾将对象指向空,在调用方法完毕后,再输出对象的值,对象不是null

class DataWrap
{
int a;
int b;
}
public class ReferenceTransferTest
{
public static void swap(DataWrap dw)
{
int tmp = dw.a;

dw.a = dw.b;

dw.b = tmp;
System.out.println("swap方法里,a成员变量的值是"

  • dw.a + ";b成员变量的值是" + dw.b);

// 把dw直接赋为null,让它不再指向任何有效地址。
dw = null;
// System.out.println(dw.a+""+dw.b);
}

public static void main(String[] args)
{
DataWrap dw = new DataWrap();
dw.a = 6;
dw.b = 9;
swap(dw);
// dw=null;

System.out.println("交换结束后,a成员变量的值是"

  • dw.a + ";b成员变量的值是" + dw.b); } }

这里方法的最后释放了dw,指向空,但是调用方法之后,再次输出dw的a,b,可以得到输出值。

但是如果是使用注释的任意一句话,都会提示说该句有一个nullpoint异常。

但是方法最后不是dw指向null了吗?为什么执行了swap之后,print语句不报空指针异常呢?
而打开其他两句的注释 会报异常?

3个回答

形参和实参的区别
方法中的形参和实参只是指向了同一个对象,但形参和实参的引用并不是同一个

这一点不难解释:

首先,方法调用之前,你定义了一个对象,然后再把该对象的引用传递给某一个方法,这里是引用传递,是形式参数,你的方法知道了这个引用的地址,可以理解为跟值传递是一样的,传递了一份地址的复制。
但是调用者的指针仍然是指向原来的地址的,你在方法内部将该引用地址指向null,并没有把原来调用的地址指向null。
其次,我们常说的引用传递,改变该地址的内容的时候(如修改对象的某个属性值),原来引用的相同地址的地方再次访问时属性信息也会变。

这是参数有效范围的问题,你在swap中吧swap方法参数dw赋值了null,但是这个赋值的有效性仅限在swap方法里面,当swap方法执行完,这个赋值操作就无效了。这也是楼上说的形参与实参的区别。

如果swap之外要用这个赋值结果,可以吧这个赋值结果return返回,当然也有其他处理方式。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java 参数传递 空对象 null
前两天,写程序时候,想传递一个数组名给一个函数,然后给数组new一下,并初始化数据,这样就使用非return,获得了一个初始化过对象,但是运行程序报“NullPointerException”。这是为什么???代码如下: public class Test_object { public int i; public void star(){ int a[] = null; int
对象==null 和null==对象
两个有什么的 不同啊rn而且一个数组对象付直时,如果直为空,那么这个数组是不是就是nulla?
java 方法返回值 和调用方法的对象
新人正在学正则表达式,看的马士兵老师的视频,学习过程中看到这么一串代码:rnPattern p = Pattern.compile("\\d3,5");rnString s = "123-34345-234-00";rnMatcher m = p.matcher(s);rnprint(m.find());rnrn上面调用的print()方法:rnpublic static void print(Object o )rn System.out.println(o);rnrnrn上面那段代码里:rn第一句,生成一个正则表达式模板,是不是这句执行完了以后,变量p = "\\d3,5?rn如果是的话,那Pattern型变量也是正则表达式(字符串)?rn第三句,p.matcher(s); 这句是把p变成m,还是把穿进去的参数s变成m?rn第四句,m.find();找匹配,找m与谁匹配的啊,还是上面这几个语句用的时候是放在一起用的?那才能看出是跟谁匹配?rn求高手有时间帮忙回复下,谢谢
网页错误:缺少对象/'null'为空或不是对象
主要问题是:1、选了某些checkbox后,按删除,不能删除,提示"网页上有错误"--'null'为空或不是对象rn 2、勾了“全部选择/取消”复选框,不执行全选功能,也提示"网页上有错误"--缺少对象rnrn代码如下:(望好心人解答,或给点提示,太感谢了!)rnrnrnrnrnrnrn rn rn rnrnrnrn rn rn 当前位置:系统管理 > 题库管理rn rnrn rn rn rn rn --选择科目--rn <% sql="select * from examsubject"rn set rs=server.createobject("adodb.recordset")rn rs.open sql,conn,3,2rn do while not rs.eof %>rn "><%=rs("examsubject")%>rn <% rs.movenextrn looprn rs.close %>rn --题型--rn 单选题rn 多选题rn 判断题rn rn rn rn rn rn rnrn rnrn rn rn rn rn 全部选择/取消rn rn rn rnrn rn rn rn 序号rn rn 科目名称rn rn 题目内容rn rn 操作rn rn <% rnsubjectview=request("subjectview")rntypeadd=request("typeadd")rnmykey=request("mykey")rnif subjectview="--选择科目--" or subjectview="" thenrn subjectview="%"rnend ifrnif typeadd="--题型--" or typeadd="" thenrn typeadd="%"rnend ifrnif mykey= "--关键字--" or mykey="" thenrn mykey="%"rnend ifrnPageCount=0rnsql="select * from examhouse where subject like '"& subjectview &"' and type like '"& typeadd &"' and question like '" & mykey &"'"rnset rs=conn.execute(sql)rnwhile not rs.eofrn PageCount=PageCount+1rn rs.movenextrnwendrnsql="select * from examhouse where subject like '"& subjectview &"' and type like '"& typeadd &"' and question like '" & mykey &"'"rnset rs=server.createobject("adodb.recordset")rnrs.open sql,conn,3,2rnon error resume nextrnPageSize = 10rnPageCount=(PageCount+PageSize-1)\PageSizernPage = CLng(Request("Page"))rn'分页显示rnIf not Page >1 Then Page = 1rnIf Page > PageCount Then Page = PageCountrni=page+(page-1)*9rnrs.AbsolutePage = PagernFor iPage = 1 To PageSizern%>rn rn rn ">rn <%=i%>rn <%=rs("subject")%>rn <%=rs("question")%>rn rn )">rn rn rn <% rnrs.MoveNextrnIf rs.EOF Then Exit Forrni=i+1rnNextrn%>rnrn rn rn rn rn rn <%If Page <> 1 Then '如果不是位于第一页%>rn rn 第一页rn rn 上一页rn <% rnEnd If rnIf Page <> PageCount Then ' 如果不是位于最后一页 rn%> rn 下一页rn rn 最后一页 <% End If %> 输入页次:rn 页次:<%=Page%>/<%=PageCount%>rn rn rn rn rnrnrnrnrnrnrnrnrnrn
'null'为空或不是对象
rnrnrn这一段代码运行的时候 浏览器右下角出现一个感叹号 双击提示 'null'为空或不是对象 大家帮帮忙 看看哪儿有错 在线等高手解决···
错误: 'null' 为空或不是对象
行: 44rnrn字符: 3rnrn错误: 'null' 为空或不是对象rnrn代码: 0rnrnURL: http://localhost/pfyljd/index.asprn大家看看这个问题怎么解决 谢谢
消息: 'null' 为空或不是对象
一直没有遇到过这个问题:  在画号jsp界面之后,发现了一个问题,点击界面按钮,出现如下错误消息“消息: 'null' 为空或不是对象” , 该消息阻止了整个界面的下一个流程。 经过查看代码才发现,是自己在书写标签的时候写错了,估计谁都不会犯的简单错误, 标签后面多了一个。。。奔溃。。。经过修改,此问题完美解决。 总结一下出现这个问题的主要原因如下:  1. 浏览器兼容性问题;
null为空或不是对象
if(IndexXMLData.readyState==4)rn rn var XMLData=IndexXMLData.responseXML;rn var Nodes=XMLData.selectNodes("QQW/Item");rn for(var i=1;i<=Nodes.length;i++)rn rn var sResult="";rn [b]sResult += " "+Nodes[i].selectSingleNode("Title").text+"("+Nodes[i].selectSingleNode("RegDate").text+") "+Nodes[i].selectSingleNode("Message").text+"";[/b] rn rn document.getElementById("MsgList_Hidden").innerHTML=sResult;rn rnrn这个是ajax的回调函数内的内容,加粗的部分老是提示:null为空或不是对象,请指点!!
'null'为空或不是对象 ,谢谢
在vs2005中运行时,发现错误rnfunction changsheng(va)rnrn rn if(va!='0')rn rn var city = document.getElementById("city");rn city.disabled=false;rn var qu = document.getElementById("qu");rn qu.disabled=true;rn rn var f=document.getElementById("qu");rn f.options.length=1;rn var url="Handler.ashx?type=sheng&id="+va;rn [color=#FF0000]var a=null;[/color]rn send_request("GET",url,[color=#FF0000]a[/color],"text",populateClass3);rn rnrn当前页的脚本发生错误 rnrn行 65 rn字符 4 rn错误 'null'为空或不是对象 rn代码 0 rn
null 为空或不是对象
在ascx中用ajax代码实现级联报错。相关代码如下。总是报'1'为空或不是对象。rn<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>rn<%@ Import Namespace="System.Data" %>rn<%@ Import Namespace="System.Data.SqlClient" %>rnrnrnrn 无标题页rn <%rn rn string customer_Id = Request.QueryString["Customer_Id"];rn if (customer_Id + "a" != "a")rn rn SqlConnection con = new SqlConnection(@"Data Source=WWW-80GNBAS5W9O\sqlexpress;Initial Catalog=7tiao;Persist Security Info=True;User ID=sa;password=111111");rn con.Open();rn string sql = "select * from city where proID = " + Convert.ToInt32(customer_Id);rn SqlCommand cmd = new SqlCommand(sql,con);rn SqlDataAdapter sda = new SqlDataAdapter(cmd);rn DataTable dt = new DataTable();rn sda.Fill(dt);rn // 将取得的值开成"ID|名称,ID|名称,..."这样的形式rn string str = "";rn if (dt.Rows.Count > 0)rn rn for (int i = 0; i < dt.Rows.Count; i++)rn rn str += string.Format("0|1,", dt.Rows[i][0].ToString().Trim(), dt.Rows[i][1].ToString().Trim());rn rn str = str.Substring(1);rn rnrn // 输出页面rn Response.Write(str);rn rn %>rnrn rnrnrnrn rn rn rn rn 北京市rn 天津市rn 上海市rn 重庆市rn rn 省rn rn 市 rn 店rn rnrnrn
'null' 为空或不是对象?
这是有关的代码,但是左下角总是有小黄感叹号,提示'null'为空或不是对象,请高手帮帮忙,小弟初学这块rn rnrnrn站外搜索rn rn rn rn rn 关键字:rn rn rn 百度rn googlern rn rn rn
null 为空或者不是对象
[code=C#]rnrnrnrn 无标题页rnrnrn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrnrn[/code]rnrnrn这段代码放在页面里面 你们就知道我出的是什么问题了 实在是太无语了 如果只是UpdatePanel+Wizard 没有验证不会报错 同样的 Wizard+RegularExpressionValidator验证控件也是不报错的 但是这三个东西凑一起 就除了问题 不管我怎么试 都市104行 'null'为空或者不是对象rn之前我也在网上搜索了下 没看懂 。。。。。。rn帮忙搞定,3Q不尽
错误提示 'null' 为空或不是对象
function ShowFLT(i) rn var lbmc ;rn var treePic;rn for (x = 1; x <= 12; x++) rn if (i == x) rn lbmc = document.getElementById('LM' + i);rn treePic = document.getElementById('treePic' + i);rn if (lbmc.style.display == "none") rn treePic.className = 'lmenua';rn lbmc.style.display = '';rn rn else rn treePic.className = 'lmenub';rn lbmc.style.display = 'none';rn rn rn else rn lbmc = document.getElementById('LM' + x);rn treePic = document.getElementById('treePic' + x);rn treePic.className = 'lmenub';rn lbmc.style.display = 'none';rn rn rn rn rnrn最后两句错误提示 'null' 为空或不是对象,什么原因,求解.
NULL为空或不是对象
我是一菜鸟,刚学习javaScript,下面是一段书上的代码,我调试不通,想知道什么原因:错误的提示是:rn行:16rn字符:4rn代码:0rn错误:'_console' 为空或不是对象rn网址:http://localhost/javascript/test2.asprnrn而我已经将_console赋值为null了,注释掉的代码运行后显示的是object,对于上面错误的提示感到很郁闷。rn我是新手,看的书籍是扫描上去的PDF,很不清楚。下面的onclick="debug("你已经点击我:\t"+'++n'+"次");"代码也报了错误,我实在搞不清什么时候用双引号,什么时候用单引号,他们互相嵌套有什么规则没有,就知道要成对使用,字符串加双引号,还有连接字符串,有哪个高人指点一下它们的使用原则。rn还有就是学习javaScript,感觉调试真的好累,有没有高手指点一个好的调试器。rn小弟在此谢过大侠!rnrn代码如下:rn rnrnrn rnrnrn
为空不是对象
" method="post">  &nbsp共<%=pc.getTotalRows()%>条记录 rn rn > <%=pc.getCurrentPage()%>/<%=pc.getTotalPages()%>页 rn > rn >rn 首页rn <%=(pc.hasPrevious())?"上一页":"上一页"%>rn <%=(pc.hasNext())?"下一页":"下一页"%>rn 末页rn rn > rn rn rnrn rn无论点击首页,上一页,下一页,末页,都提示turnPageForm.turnPageMethod为空不是对象!请大家帮忙!!
对象和指向对象的指针
为什么对象不能多态,而指向对象的指针却可以?
'options'对象为空或者不是对象
rnrn Select Navigationrn rnrnrn rnChoose a place to go:rnrn Home Pagern Shop Our Storern Shipping Policiesrn Search the Webrnrnrnrnrn
对象为空或不是对象,求助!
我做了一个可编辑的iframe,并用一个按钮显示隐藏html代码,以下程序可以正常运行。但请注意我注释掉的部分,我原来想通过d来代替document.frames(0).document,可是这样一替换,就提示脚本错误:“d不是对象或为空!”请各位高人指点一下小弟!谢谢rn rnrncodernrn
DOcument对象为空或者不是对象
做的一个后台管理页面,左侧为导航页.rn用javascript做了一个可以展开的闭合的菜单.rn rnrnrn然后在父菜单下写rnrn rn rn 系统管理 rn rn rnrn提示document.all.item(...)为空或不是对象.怎么解决?
对象调用方法
[code=&quot;java&quot;][/code] [code=&quot;java&quot;] public class C { void g() { B b1 = new B(); b1.protect(); System.out.println(b1.i); } public static void main(String[]ar...
对象为空或不是对象?
程序代码如下:rn rnrnrn....rnrnrn在单击这个图像的时候,为何提示对象为空或不是对象,哪里出错?谢谢!
对象和调用方法
PetDao petDao = new PetDaoImpl(); List pets = petDao.getPets(); for(Pet p : pets){ System.out.println(p.getId() + "\t" + p.getName()); }        PetStoreDao petStoreDao = new PetStoreDaoImpl();
********************对象为空或者不是对象*********************
function checkInt(txtb)rnrn var tmp = eval(txtb);rn if(isNaN(tmp.value)==true)rn rn alert("请输入数字");rn document.all.tmp.focus();rn return false; rn rn if(parseInt(tmp.value)<0)rn rn alert("请输入大于0的正数");rn document.all.tmp.focus();rn return false;rn rnrnrn我在上面函数里执行检查,但是当我输入不合法的时候弹出对话框同时在页面里显示错误rn说是document。all。tpm为空或者不是对象rn焦点不能设置rnrn为什么啊rnrnrn在问,就是当程序运行到某一步时,如何退出函数啊
让对象=null的方法
一个对象 class a = new class()rn除了这个a=nullrn还有别的间接方法能使他=null吗?rn例如 定一个 String str= new String("abc");把该对象传给一个函数,形参为(String s)rn该函数功能是:rn从键盘输入一个字符,如果字符不是空格,则str=输入的字符,否则令str=nullrn不可以直接调用str=null,
js 判断对象为空或者不是对象的方法
在写js脚本的时候经常遇到对象为空或者不是对象的情况,出现这种情况我们可以用if去判断它,然后去执行相应的处理方法,具体判断他们的方法有以下几种: 1、if   (typeOf(x)   ==   &quot;undefined&quot;) 2、if   (typeOf(x)   !=   &quot;object&quot;) 3、if(!x) 其中第三种是最简单的方法,但是第三种就不能用if(x)这种互斥的方法去判断,只能...
java父类对象指向子类对象
package com.javabase; /** * 当父类中的一个方法只有在父类中定义而在子类中没有重写的情况下, * 才可以被父类类型的引用调用; 对于父类中定义的方法,如果子类中重写了该方法, * 那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。 而在父类中没有的方法, * 但是在子类中有,那么父类不能调用这个方法。 * @author abc * */class
java中父类对象指向子类对象
                                            父类对象变成子类对象 在父类对象与子类对象转换在工厂模式中常用。 先看看子类父类互转的例子。 public class employee { private String name; private double salery; public String getName() { retur...
Javascript判断对象为空对象的方法
for in 循环判断 var obj = {}; var result = function() { for(var key in obj) { return false; } return true; } 将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var result = (JSON.stringify(data) == "{}"); ...
this对象的指向
//undefined undefined 当我们调用 fullName() 时,this 实际上是指向全局对象的,并没有名为 first 或 last 的全局变量,所以它们两个的返回值都会是undefined
style 不是对象或为空?????
Element.Methods = rn visible: function(element) rn return $(element).style.display = 'none';rn rn rn
为空或不是对象
function loadper() rn var ids = document.getElementById("HidId").value;rn var s = AgentSysWeb.PerManage.Bookkeep.GetId(ids).value;rn var table = s.table[1];rn rn rn var p1 = table.Rows[0]["Name"];rn var p2 = table.Rows[0]["Sex"];rn var p3 = table.Rows[0]["Nation"];rn var p4 = table.Rows[0]["Origin"];rn var p5 = table.Rows[0]["Education"];rn var p6 = table.Rows[0]["Speciality"];rn var p7 = table.Rows[0]["School"];rn var p8 = table.Rows[0]["Email"];rn var p9 = table.Rows[0]["Tell"];rn var p10 = table.Rows[0]["Birthday"];rn var p11 = table.Rows[0]["Address"];rn var p12 = table.Rows[0]["Account"];rn var p13 = table.Rows[0]["Password"];rn var p14 = table.Rows[0]["Jointime"];rn var p15 = table.Rows[0]["Position"];rn var p16 = table.Rows[0]["Status"];rn var p17 = table.Rows[0]["Department"];rn var p18 = table.Rows[0]["PerNum"];rn var p19 = table.Rows[0]["worktime"];rn var p20 = table.Rows[0]["formal"];rn var p21 = table.Rows[0]["Remark"];rnrnrn这是一个加载页面的方法,运行的时候会提示说table.1为空或不是对象,这是怎么回事呢?
length为空不是对象
[img=https://img-bbs.csdn.net/upload/201312/19/1387418901_414168.jpg][/img]jquery 1.7.2 报错rnlength 为空或者不是对象
java空对象
1、定义     空对象就是一个正常的对象,只不过你用这个对象来替代null。 2、作用       当使用null表示缺少对象时,在每次引用前都要测试其是否为null,因此需要在代码中加入判断语句,当判断语句变多时,代码就变得杂乱,使用空对象可以减少判断的语句。 例子:     假如有一个Person类,Person类有姓名地址等属性。还有一个Position(职位)类,职位类包含了职...
java用对象的引用调用方法
package practicez;rnrnpublic class Praz rnpublic static void main(String[] args) rn Praz x=new Praz(); //这里会报错,为什么??rn System.out.println(x.m(6,5,7));rn rnrnpublic int m(int a, int b, int c) rn rn return a+b+c;rnrnrnrn
析构对象后为何还能输出该对象的成员变量的值?
#include rn using namespace std;rn class A rn rn public:rn A(int i)cout<<"执行构造函数创建一个对象\n";x=i;rn ~A()cout<<"执行析构函数!\n";rn int get() return x;rn void set(int i)x=i;rn private:rn int x;rn ;rn A func( );rn int main()rn rn rn A *r=&func(); rn cout<<"对象a的副本的地址:"<<&r<get()<
Java空对象模式
在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。 在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。 Ab...
java空对象模式
空对象模式,一般和工厂类结合使用有两种实现方式 一种通过接口,另一种是通过抽象类。反正不管哪一种 ,都要给你想要作用的那个类 , 定义一个接口,或者一个抽象类 一个方法 isNull(); 让类继承实现 这个方法 ,普通类就返回false ,空对象类 返回true 工厂模式 在上面工厂模式代码上进行修改。 首先,给Tree接口 加一个方法。boolean isNUll() package...
Java空对象设计模式
有时候我们的代码中为避免 NullPointerException 会出现很多的对Null的判断语句,而这些语句一旦多起来,我们的代码就会变的惨不忍睹,因此我们引入了空对象模式(null object pattern)以此来使我们的代码变的更优雅一点。 下面来看一下空对象模式的大概视图 为了方便我这里就直接用手写的了,大家谅解一下:) ,凑合着看吧 假如我们需要查询某个学生的信息,我们输入学号来...
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池