Java和C的区别:关于调用函数返回局部变量

问题描述

话说C语言中每次写函数是都会告诉自己不要返回局部变量,而现在在学Java,发现写方法时返回局部变量却没有C中的问题,这是怎么回事,C中是因为调用结束后局部变量消失,对应地址里的内容不确定,而Java中又是怎么样的呢??

解决方案

解决方案二:
c里如果返回的是副本,而不是引用,那么局部变量不会消失,不是吗?在java里,由于是进行引用传递,他会在每一次对象赋值的时候进行引用计数,如果计数不为0,就不会回收局部变量,那么也就不会造成消失的问题
解决方案三:
引用1楼kifile的回复:

c里如果返回的是副本,而不是引用,那么局部变量不会消失,不是吗?在java里,由于是进行引用传递,他会在每一次对象赋值的时候进行引用计数,如果计数不为0,就不会回收局部变量,那么也就不会造成消失的问题

话说C中没有引用的用法吧,另外还有Java中按引用传值不是只有引用类型才可以吗?基本类型不是按值传递吗?还是我记错了
解决方案四:
额,好吧,我记混了,c++才有引用的基本类型是按值传递,相当于c++里的复制传递,对于除了String的类对象而言,平时传递的都是引用
解决方案五:
Java中所有东西都是引用,所有参数传递都是按值,这里面说的传值是指复制那个符号(这个符号代表那个对象本身,即使那个对象指一个基本类型),不是说复制那个值。这更像C++的引用而不是C的指针。

时间: 2024-08-01 07:25:57

Java和C的区别:关于调用函数返回局部变量的相关文章

java 游戏开发-Java 运行程序时,错误调用函数,

问题描述 Java 运行程序时,错误调用函数, 做的一个棋类小游戏,有条规则是棋子变成王后,可以远距离吃子,在编写王吃子规则时,需要使用if语句对是否是王进行判断,但是在运行时,还没有变成王,就输出判断为王时的提示语句,

多线程- 我的java难道是盗版吗(调用有返回值的函数无响应)

问题描述 我的java难道是盗版吗(调用有返回值的函数无响应) boolean flag = pcSystem.returnTenderResult(bidDocu,tenderDocu); 我在自定义pcSystem类中调用一个具有boolean返回值的函数returnTenderResult(synchronized) 这条语句的上一条语句都会执行,而returnTenderResult内方法一定概率上不执行 (方法内的第一条语句都没有执行,还不涉及方法内具体逻辑),系统涉及了多线程, 这是

plsql调用函数返回值为空

问题描述 plsql调用函数返回值为空 函数: create or replace function avg_pric(v_ctgry in varchar2,v_pric in out number) return number is Result number; v_qnty number; begin if v_pric is null then v_pric := 0; end if; select avg(productprice),min(quantity) into v_pric,

返回二维数组 语言-关于调用函数返回二维数组的问题

问题描述 关于调用函数返回二维数组的问题 我想调用一个函数,返回二维数组,但是一直不对,写了一个简单的程序,还请各位大神给看一下, #include #include float*q[3];int i,j; int main() { float f[3][2],A[3][2]; float*(TIME(float E[3][2])); for(i=0;i<=2;i++) { for(j=0;j<=1;j++) {f[i][j]=j+i;printf("%fn",f[i][j

C/C++函数调用与函数返回值

函数参数与函数调用 1.函数调用的作用: ·用实参数向形式参数传递数据: ·为获得数据参数及在函数体中声明的变量分配存储空间: ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调函数. 当参数表为空时,表示该函数不从调用函数接受数据. 2.数值参数 传值调用:形参只有在函数被调用时,才被分配内存区域,并一直保留到函数返回时被撤销为止.形参和实参只是名字相同,各自占有各自的内存空间和生存周期,因此他并不能改变主调函数中的变量. 3.地址参数 传址调用:传送的是变量的地址,尽管主函数和

python读取oracle函数返回值_python

在oracle中创建一个函数,本来是想返回一个index table的,没有成功.想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格式. 考虑到返回数据量可能会很大,varchar2类型长度吃紧,于是将返回值类型设置为clob.  我是用scott用户的测试表emp,这个是函数定义情况: create or replace function test_query_func(dept varchar2) return clob is type test_record is record (

JavaScript:new 一个函数和直接调用函数的区别分析

或许许多人对此不以为然,在函数前加 new 关键字,不就是实例化一个对象吗?但事情显然没那么简单   复制代码 代码如下: function Test() { this.name = 'Test'; return function() { return true; } } var test = new Test(); // 这里的 test 是什么? 是一个 Test 对象吗?错!这里 test 是一个函数--Test 中返回的 function() { return true; }.这时,ne

【IOS-COCOS2D-X 游戏开发之十三】详细讲解在XCODE中利用预编译并通过JNI调用ANDROID的JAVA层代码(COCOS2DX里访问调用ANDROID函数)!

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/725.html 很多看过之前Himi的[iOS-cocos2d-X 游戏开发之七]整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可! 博文的童鞋都在问我如何在Xcode中能调用Java的函数,比如在Android端需要加入广告.支付.等第三方平台或者

Lua中调用函数使用点号和冒号的区别_Lua

本文是面向对象预热篇,讲解函数两种调用方式的区别,初学者比较容易被坑. 1.初学者最易混乱Top1--调用函数时用点号还是用冒号? 我们来看看下面的两句代码: 复制代码 代码如下: mSprite.setPosition(100, 20); mSprite:setPosition(100, 20); 对于初次接触Lua的朋友来说,这简直就是噩梦,为嘛函数的调用有两种形式,是让我们随便挑的意思吗?   这两种形式是有区别的,区别很大,但只有一个. 不过,暂时不解释,后面再介绍. 2.最简单的类 我