今天朋友问我关于char数组为什么不是“good and abc”
来源:互联网 发布:阿里云虚拟主机这么用 编辑:程序博客网 时间:2024/05/01 08:38
今天看了一道题,代码如下:
打印的结果:
- public class Example{
- String str=new String("good");
- char[]ch={'a','b','c'};
- public static void main(String args[]){
- Example ex=new Example();
- ex.change(ex.str,ex.ch);
- System.out.print(ex.str+" and ");
- Sytem.out.print(ex.ch);
- }
- public void change(String str,char ch[]){
- str="test ok";
- ch[0]='g';
- }
- }
其结果是 good and gbc ,为啥 string 没改变而char 改变了呢??
原来是因为:
str是按值传递,所以在函数中对它的操作只生效于它的副本,与原字符串无关。
ch是按址传递,在函数中根据地址,可以直接对字符串进行操作。
str指向的是String类的引用,保存的是地址。当新的“test good ”产生的时候,会在内存中新建String对象,将地址复制给changes方法的str。而ch不会产生新的char数组,直接对原来的数组进行更改。
然后,当原来的程序改下后:
- public class StringArrTest {
- String str = new String("good");
- char[] ch = { 'a', 'b', 'c' };
- int[] arr = new int[] { 1, 2, 3 };
- public static void main(String[] args) {
- StringArrTest ex = new StringArrTest();
- ex.changes(ex.str, ex.ch, ex.arr);
- System.out.print(ex.str + " and ");
- System.out.print(ex.ch);
- System.out.print(ex.arr[0]);
- // System.out.println(ex.arr);
- }
- public void changes(String str, char ch[], int[] arr) {
- str = "test ok";
- System.out.println("chagne str:" + str);
- ch[0] = 'g';
- System.out.print("change ch :");
- System.out.println(ch);
- arr[0] = 4;
- System.out.print("change arr :");
- System.out.println(arr[0]);
- }
- }
打印的结果:
可以看到,输出字符数组和整形数组是不一样的,字符数组会把所有字符输出来,那是因为System.out.print(a);此方法会自动给你解析你的数组,然后打印出来的。而当是整形数组的时候,就会打印出该数组的地址(当然是首地址)。
如果在将
System.out.print(ex.str + " and " +ex.ch);
ch也会打印出字符数组的地址,而不会解析数组,依次打印每个字符了。
0 0
- 今天朋友问我关于char数组为什么不是“good and abc”
- 笔试题--“good and abc”
- good and Abc”的理解
- 很多朋友问我:什么是博客?为什么要博客!
- 朋友今天问我一个面试题,我看了看,给大家分享一下
- 关于char p[]的数组名不是指针
- 我问"为什么"?
- 今天忽然有朋友问我怎么从微信公众号里面直接打开外部app
- 今天别人问我为什么Ab.Test与Loadrunner测试结果不一致
- char str1[]="abc";char str2[]="abc";str1与str2不相等,为什么
- char str1[]="abc"; char str2[]="abc";str1与str2不相等,为什么
- char str1[]="abc"; char str2[]="abc";str1与str2不相等,为什么
- 关于C语言中为什么getchar的返回类型不是char而是int的说明
- 朋友结婚了,新娘不是我
- 指向字符数组的指针 char*p="abc"和char p[]="abc"的区别。
- 朋友今天问俺,日文输入法无法打出日语汉字?
- [问与答]为什么 'a' in ('abc') 是True 而 'a' in ['abc'] 是False呢?
- 问我为什么签名档写“为什么”。
- 读取文件方法大全
- [线段树+离线处理] upcoj 2224 Boring Counting
- 网络编程
- HashMap和Hashtable的区别
- msyql中文插不进去的情况
- 今天朋友问我关于char数组为什么不是“good and abc”
- Eclipse常用快捷键
- AudioStreamBasicDescription结构说明
- 集成spring3,hibernate4
- android解析xml文件的方式(其一)
- HashMap<String,short>的问题
- Java 读取配置文件
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- PTHREAD的安装