A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© asinzuo 中级黑马   /  2015-8-16 07:25  /  2632 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1黑马币
  1. public class Args {
  2.         public static void main(String[] args) {

  3.                 int [] arr = {1,2,3};
  4. int [] arr1 = new int [] {1,2,3};
  5.                 int x = 5;
  6.                 String str = "abc";
  7.                
  8. show(arr,x,str);                //这么写,正确

  9. show(new int[]{1,2,3},5,"abc");                //这么写,也正确
  10.                
  11.                 //show({1,2,3},5,"abc");         /<font color="#ff0000">/这么写,为什么编译报错,{1,2,3}是个什么样的存在</font>
  12.         }

  13.         public static void show(int [] arr,int x,String str)
  14.         {
  15.                 System.out.println(Arrays.toString(arr)+x+str);
  16.         }
  17. }
复制代码


最佳答案

查看完整内容

new int [] {1,2,3}; 这句将新建一个数组 新建了一个一维数组 含有3个元素 1 2 3,然后将它作为参数传递给show 所以可以 show(new int[]{1,2,3},5,"abc"); 但是你传递给函数的并不是arr,因为你new 新建了一个值一样的数组 {1,2,3} 是一个错误的存在 java中有一个叫区域代码块就是在函数中 单独用{}扩出来的 比如 代码块{1,2,3}里边都不是合法的语句所以编译失败,但是 new int[]{1,2,3};里的括号不是区域代码块 它是一维 ...

7 个回复

正序浏览
编译时的异常  说明是代码的规范不对  {}是构造代码块  可以放在类中  和main方法平行
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-8-17 08:28:45
地板
fmi110 发表于 2015-8-16 07:25
new int [] {1,2,3}; 这句将新建一个数组 新建了一个一维数组 含有3个元素 1  2  3,然后将它作为参数传递 ...

说的好有道理
回复 使用道具 举报
数组声明的三种方式:
int   [][]   iArray;  
int   []iArray[];  
int   iArray[][];
回复 使用道具 举报
{1,2,3}是一个元素吧,但是你这里的 System.out.println(Arrays.toString(arr)+x+str);是把数组变成字符串打印出来就不成了
回复 使用道具 举报
int [] arr=new int[]{1,2,3} = ;
等于静态初始化数组, 这个是new出来的 ,储存在堆内存,所以在这个时候arr= {1,2,3}这个在系统输出是个地址值
所以arr 或者 new int[]{1,2,3}都是代表一维数组,所以输出没问题。
但是直接输出{1,2,3}的话,就不能代表数组了 ,具体是什么我也不太清楚了
回复 使用道具 举报
int [] arr = {1,2,3};
其实应该是int[ ] arr=new int[]{1,2,3};的简写
字符串"abc"是一个字面值形对象,arr是一个地址指向了堆内存,然后堆内存里面的内容是1,2,3, {1,2,3},并不能表示一个对象
回复 使用道具 举报
new int [] {1,2,3}; 这句将新建一个数组 新建了一个一维数组 含有3个元素 1  2  3,然后将它作为参数传递给show
所以可以 show(new int[]{1,2,3},5,"abc"); 但是你传递给函数的并不是arr,因为你new 新建了一个值一样的数组

{1,2,3} 是一个错误的存在
java中有一个叫区域代码块就是在函数中 单独用{}扩出来的
比如
  1. int main()
  2. {
  3.     int a;
  4.    {int b;intc }//区域代码块,里面是语句
  5. }
复制代码

代码块{1,2,3}里边都不是合法的语句所以编译失败,但是
new int[]{1,2,3};里的括号不是区域代码块  它是一维数组建立的固定使用方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马