java中数据的传递方式到底是怎样的!

今天早上我了一道有关java的题。主要考点是考java中值得传递方式。

之前我在javaoo里总结的是:基本数据类型中保存的是实际的值,引用数据类型保存的是被引用的内存地址,那么基本数据类型就是按值传递,引用数据类型就是按地址来传递的。(难道我一开始就错了)

题是真样的:

 1 public class SendValue{
 2     public String str="6";
 3     public static void main(String[] args) {
 4         SendValue sv=new SendValue();
 5         sv.change(sv.str);
 6         System.out.println(sv.str);
 7     }
 8     public void change(String str) {
 9         str="10";
10     }
11 }

输出的结果是:?6

 有解释说:change方法里面是将传入的参数修改成10,但是并没有对SendValue的属性str就行修改,要修改必须指明this.str="10",所有答案还是6。

 

还有一题是这样的:

 1 public class Example{
 2     String str=new String("hello");
 3     char[]ch={'a','b'};
 4     public static void main(String args[]){
 5         Example ex=new Example();
 6         ex.change(ex.str,ex.ch);
 7         System.out.print(ex.str+" and ");
 8         System.out.print(ex.ch);
 9     }
10     public void change(String str,char ch[]){
11         str="test ok";
12         ch[0]='c';
13     }
14 }

输出的答案是 : ?   hello and cb;

有的解释说:String类是final类型的,不能继承和修改这个类。str=“tesk ok”,其实是隐含的让Java生成一个新的String对象,那么就与原来的“Hello”没有任何关系,当函数结束,str作用结束,所以输出的还是“Hello”。 char ch[] 是传递引用,修改了原内容。

 

然后我上网查,java是按值传递还是引用传递,有的说:

按值传递:指的是在方法调用时,传递的参数是按值的拷贝传递。就是说传递的是拷贝后的值,与前面那个值无关了。

引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递前后都是同一个引用。

但是又有人说这是不对的,他说Java中只有按值传递,没有按引用传递!

各位大神们,给我解释解释嘛!

 

时间: 2024-09-20 04:21:30

java中数据的传递方式到底是怎样的!的相关文章

java中数据交换的问题

问题描述 java中数据交换的问题 晚上在写程序的时候需要用到交换数据,所以我就主类里面写了一个swap, 但是在调用之后发现数据没有交换成功,可是在swap里面数据的确交换成功了呀, 不知道是什么原因,下面贴出代码: public static void main(String[] args){ int a,b; a = 4; b = 5; swap(a,b); System.out.println(a+","+b); } public static void swap(int a,

Java中数据输入输出流——DataInputStream和DataOutputStream

一.基本概念 DataOutputStream 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中.然后应用程序可以使用数据输入流将数据读入. DataOutputStream 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出流写入稍后由数据输入流读取的数据.对于多线程访问不一定是安全的. 线程安全是可选的,它由此类方法的使用者负责.   二.例子 /** * 必须先使用DataOutputStream写入数据,然后使

java中数据缓存的核心机制

一.以下为集数家之长实现的数据缓存核心机制代码片段,以抛砖引玉,供大家学习,此片段的核心代码参考sun的源码实现.sun没有对此段代码开放,它的功能在ArrayBlockingQueue(jdk1.5)中已经实现并提供开放接口.没有时间看下面的代码的可直接查看ArrayBlockingQueue的api,如果对象ArrayBlockingQueue也没有兴趣的同学,可以直接调用ConcurrentHashMap(jdk1.5), ConcurrentSkipListMap(jdk1.6),这些类

深入分析 Java 中的中文编码问题(转)

  简介: 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别:Java 中经常需要编码的场景:出现中文问题的原因分析:在开发 Java web 程序时可能会存在编码的几个地方,一个 HTTP 请求怎么控制编码格式?如何避免出现中文问题? 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不

深入分析 Java 中的中文编码问题

简介: 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别:Java 中经常需要编码的场景:出现中文问题的原因分析:在开发 Java web 程序时可能会存在编码的几个地方,一个 HTTP 请求怎么控制编码格式?如何避免出现中文问题? 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我

Java中何谓创建对象?

问题描述 今天在帮人解决一个String得问题时,被难到了.问题如下:Strings="abc";Stringstr=newString("abc");为什么System.out.println(s==str);为false?Stringstr1=str+1+"a"+2+"b";问这里创建了几个对象?还有就是在Java中创建对象得定义到底是什么?有人说只要在内存开辟了空间就是创建了对象,那么inta=1;是否创建了对象了?等待

java中如何让setText方法读取指定标签数据的时候特意空出一点点空间

问题描述 java中如何让setText方法读取指定标签数据的时候特意空出一点点空间 如何让setText方法读取指定标签数据的时候特意空出一点点空间java当中 解决方案 http://zhidao.baidu.com/link?url=znfx-j9HEz7fJS4EcXcc-gX096uqEKQMTQo4vBNrc9bhRAlFHGGxkAP8cPTOkATWxy3DqxQwhBwFAscWkNPxe_,用空字符串占位置看看可不可以也就是字符串前面有空格,后面有空格. 解决方案二: 使用全

Java中ResultSet数据自动填充到类中&类实例填充PreparedStatement

需求: (1)提取ResultSet中值到一个类中挺麻烦的,需要new一个变量,使用对应成员的Set方法赋值,能不能根据类的Class,直接提取出ResultSet中的数据,最后返回实例化的类? (2)可以用PreparedStatement预编译带变量的sql语句,在execute之前需要将变量值填充进去,一个一个设置太麻烦了,能不能提供一个类变量,使用类成员变量的值自动填充PreparedStatement? 这样的功能许多开源的框架可以实现,但是不想因为这么一点点的需求去学习那么庞大的一套

JAVA中对存储过程的调用方法(六) 增加数据的存储过程

六.增加数据的存储过程 ------------存储过程-------------------- create procedure InsertPro @StuID int, @StuName varchar(10), @StuAddress varchar(20) as insert into 学生基本信息表 values(@StuID,@StuName,@StuAddress) -----------调用存储过程--------------- exec InsertPro 5,'555','