Java-foo.charAt(i)的返回如何作为引用?

Java-foo.charAt(i)的返回如何作为引用?,java,pointers,pass-by-reference,Java,Pointers,Pass By Reference,串福 当我做if(foo.charAt(I)='a') “a”如何作为参考 敌人foo.ChaAt('a')如何返回引用?当我调试时,它看起来就像“a” 这些是指针吗?我是不是太醉了 如果它们返回值,它们会是什么样子?听起来您是一些错误信息的受害者。方法String.charAt()。它不返回任何类型的引用;没有涉及指针。charAt不返回对对象的引用,而是返回一个char基本类型。当您使用==比较两个字符是否相等时,您是在比较它们的值,而不是它们的引用(在Java中,我们不讨论指针)。'a'将

串福

当我做if(foo.charAt(I)='a')

“a”如何作为参考

敌人foo.ChaAt('a')如何返回引用?当我调试时,它看起来就像“a”

这些是指针吗?我是不是太醉了


如果它们返回值,它们会是什么样子?

听起来您是一些错误信息的受害者。方法
String.charAt()。它不返回任何类型的引用;没有涉及指针。

charAt
不返回对对象的引用,而是返回一个
char
基本类型。当您使用
==
比较两个字符是否相等时,您是在比较它们的值,而不是它们的引用(在Java中,我们不讨论指针)。

'a'将不是引用
foo.charAt(index)
将返回一个
char
原语,因此您可以安全地使用
=
。否则,您将不得不在Java中使用
foo.charAt(index).equals(bar)

,除原语类型外,所有内容都是引用
String
不被视为基本类型,但
char
被视为基本类型。因此,在您的示例中,AFAIK'a'不是一个参考

但是,Java支持自动装箱,因此如果您尝试使用“a”作为对象,它可能会正常工作,就像它是一个引用一样

更新:以下示例可能会有所帮助:

char a = 'a';
char b = 'a';
System.out.println(a == b); // true
String c = "a";
String d = "a";
System.out.println(c == d); // Dunno; may be true if the compiler created a single object for c and d, otherwise it's false
String e = new String("a");
String f = new String("a");
System.out.println(e == f); // false

假设:
foo
类型为
String

如何将foo.charAt(i)的返回作为参考

这不是参考资料。它是原始类型:
char

检查java文档中的

查看返回类型:它是
char
。char不是引用类型


在Java中,您有一个引用类型和

虽然可能会涉及一些酒精,但我会尝试给您一个快速的Java基本介绍!;)

在开始之前,请记住Java中没有指针。现在很多人会开始对我大喊大叫,但这是一种说话的方式,我已经准备好接受任何可能的评论

  • 在Java中有对象和基本数据类型
    byte、short、int、long、float、double、boolean、char
    是唯一的原语;对象中的所有其他内容(数组也是对象)
  • Java中的变量可以保存原语数据类型的确切值,也可以保存告诉JVM如何访问对象的值(请注意,我本可以说是引用,但我没有说,因为这样更好)
  • Java中的字符串是一个对象(一个特殊的对象,因为它是不可变的,并且有很多关于字符串池和内存的讨论可以做),它由一个字符数组支持
  • foo.charAt(i)
    返回给定零基索引处的char(基本数据类型)
    i
  • 'a'
    是一个
    字符
    !就这样
  • =
    运算符比较变量。变量也可以具有基元或对象类型。在您的示例(原语)中,它比较2个字符,如果它们具有相同的值,则返回true或false。你也可以用同一个操作符来比较不同的基元类型,但是由于它们的大小不同,它会变得更复杂一些。您还可以将对象变量(引用)与之进行比较,但请注意,在这种情况下,您将比较告诉JVM如何访问对象的两个值。(即,您只能确定这两个变量是否到达同一个确切的对象,同一个!)
有关传递引用(Java中根本不存在)的更多说明,您可以查看


如果您需要任何其他澄清,请告诉我

您需要提供更多关于您所做工作的背景信息吗?什么是
foo
?你剩下的代码是什么?你期待什么?你到底得到了什么?@Ernest Friedman Hill:当然,但他提到他是Java新手,所以我在回答中提到了“自动装箱”一词,因为这可能会令人难以置信地困惑。比如说,Character[]array={“a”。charAt(0)}将很好地编译并将引用放入数组中。哦,我知道(我从上个世纪就有了我的SCJP),我知道,它是由charAt返回的char。然而,您并没有将原语放入数组中。因此,自动装箱来迷惑新来者;)此外,原语类型和引用类型之间可能存在差异,它们都是通过值传递的,没有例外。等等,原语类型是通过引用传递的,所以我可以使用==来比较引用值?我认为您混淆了和的概念。这个解释太长了,不适合这里,但是其他的回答者对这个问题有很好的见解。我不相信foo.charAt(I).equals(bar)会起作用。我想我试过这个,它告诉我没有与.charAt()关联的.equals是的,我知道,我是说如果它是引用类型,你必须使用
.equals
,但是因为它是一个基本类型,你可以安全地使用
=
。所以我可以将基本类型与'=='进行比较,但不能说是字符串?因为一个是原始的?所以当我比较两个字符时,'=='正在比较值,但是用我比较两个字符串,'='就好像这两个不是原语,所以不可以?@CodingIsAwesome完全正确
'a'=='a'
无论'a'来自何处,但
“a”=='a'
当且仅当双方都引用同一对象时。请参阅我的更新答案以了解更多详细信息。可能。。。我只是想自己学习。我读到“==”仅用于比较相同的对象或引用。就像char是char一样。您也可以对基本值使用
=
。“==”检查变量中的实际位是否相同。如果变量包含对对象的引用,则测试两个变量是否引用同一对象。在其他情况下,您正在测试组成该值的位是否为s