Java 为什么charAt的工作方式会因打印的数据类型而异

Java 为什么charAt的工作方式会因打印的数据类型而异,java,char,primitive,charat,Java,Char,Primitive,Charat,我试着写代码来乘虚数,这就是为什么字符串中有“I”。所以我想先取,然后转换成int或double。这给了我52个,这让我很困惑。然而,当我直接打印到控制台时,它工作了,但没有双重功能。这是无用的,因为我需要在其他地方使用它。这是怎么回事?尝试将字符串a的部分解析为int或double会更好吗?除了不使用解析操作字符串中的数字,还有其他方法吗?还有一些方法可以处理虚数,例如“e^pi*i=1”字符串是一系列符号,如字母、标点符号和数字,称为字符。每个字符都与一个数字相关联。一种常见的方法是使用所谓

我试着写代码来乘虚数,这就是为什么字符串中有“I”。所以我想先取,然后转换成int或double。这给了我52个,这让我很困惑。然而,当我直接打印到控制台时,它工作了,但没有双重功能。这是无用的,因为我需要在其他地方使用它。这是怎么回事?尝试将字符串a的部分解析为int或double会更好吗?除了不使用解析操作字符串中的数字,还有其他方法吗?还有一些方法可以处理虚数,例如“e^pi*i=1”

字符串是一系列符号,如字母、标点符号和数字,称为字符。每个字符都与一个数字相关联。一种常见的方法是使用所谓的ASCII字符。在本例中,您可以看到字符
'4'
由数字
52
表示

int c = a.charAt( g );
考虑到这一点,让我们看看您的一些代码:

public class MyClass 
{
    public static void main(String args[]) 
    {
        String a = "(4 + 4i)";
        String b = "(2 + 3i)";
        int g = 1;
        int c = a.charAt( g ); // sets c to 52
        System.out.println( c ); // prints 52
        System.out.println( (double) a.charAt( g ) ); // prints 52.0
        System.out.println( a.charAt( g ) ); // prints 4
        System.out.println( 2 * a.charAt( g ) ); // prints 104
    }
}
此行将自动将字符转换为其数值。我所说的“数值”是指代表字符的数字,而不是数字本身的值。在这种情况下,字符
'4'
具有数值
52

int c = a.charAt( g );
这将打印出字符
'4'
,而不是
int
4
。了解数字字符及其整数值之间的差异非常重要

为了获得数字
4
,以便执行算术运算,必须解析
字符串。函数
Integer.valueOf()
将对此有很大帮助

您还应该了解类和对象。例如,您可以创建一个
Complex
类,该类允许您将复数作为一个单独的实体来使用,并具有自己的操作

要获取所需的数值,需要使用
Integer.valueOf()
Double.valueOf()
,具体取决于您想要的是
int
还是
Double

System.out.println( a.charAt( g ) ); // prints 4

如果要允许数字包含多个数字或小数点,则需要使用更复杂的解析方法。

字符串是一系列符号,如字母、标点符号和数字,称为字符。每个字符都与一个数字相关联。一种常见的方法是使用所谓的ASCII字符。在本例中,您可以看到字符
'4'
由数字
52
表示

int c = a.charAt( g );
考虑到这一点,让我们看看您的一些代码:

public class MyClass 
{
    public static void main(String args[]) 
    {
        String a = "(4 + 4i)";
        String b = "(2 + 3i)";
        int g = 1;
        int c = a.charAt( g ); // sets c to 52
        System.out.println( c ); // prints 52
        System.out.println( (double) a.charAt( g ) ); // prints 52.0
        System.out.println( a.charAt( g ) ); // prints 4
        System.out.println( 2 * a.charAt( g ) ); // prints 104
    }
}
此行将自动将字符转换为其数值。我所说的“数值”是指代表字符的数字,而不是数字本身的值。在这种情况下,字符
'4'
具有数值
52

int c = a.charAt( g );
这将打印出字符
'4'
,而不是
int
4
。了解数字字符及其整数值之间的差异非常重要

为了获得数字
4
,以便执行算术运算,必须解析
字符串。函数
Integer.valueOf()
将对此有很大帮助

您还应该了解类和对象。例如,您可以创建一个
Complex
类,该类允许您将复数作为一个单独的实体来使用,并具有自己的操作

要获取所需的数值,需要使用
Integer.valueOf()
Double.valueOf()
,具体取决于您想要的是
int
还是
Double

System.out.println( a.charAt( g ) ); // prints 4

如果希望允许数字包含多个数字或小数点,则需要使用更复杂的解析方法。

您得到52,因为
'4'
的ascii值是52

int c = Integer.valueOf(a.charAt(g))

最后是a,这是提供重载方法来写入
int
(或
char
,或
String
,或
double
,等等)。

您得到52,因为
'4'
的ascii值是52

int c = Integer.valueOf(a.charAt(g))

最后是一个,这就是提供重载方法来编写
int
(或
char
,或
String
,或
double
,等等)。。。简单的回答是:如果处理字符
char
s,则处理字符
'4'
具有ASCII码
52
。如果将
char
转换为
int
(通过
int c=a.charAt(…)
执行此操作,则会得到ASCII码,尽管ASCII码表示数字。但是,如果直接打印
char
System.out.println(a.charAt(…))
,Java足够聪明,可以将ASCII代码翻译成实际字符。(备注:ASCII部分实际上是一个谎言,Java字符是UTF-16)52是复数字符“4”的字符码,你可以参考一下……简单的回答是:如果你处理
char
s,你处理的字符
'4'
有ASCII码
52
。如果你把
char
转换成
int
(你可以通过
int c=a.charAt(…)
,您得到了ASCII码,尽管ASCII码表示一个数字。但是,如果您直接打印
字符(
System.out.println(a.charAt(…))
,Java足够聪明,可以将ASCII码转换为实际字符。(注:ASCII部分实际上是一个谎言,Java字符是UTF-16)52是复数字符“4”的字符码,你可以参考答案,虽然答案绝对正确,但我认为OP的一个主要混淆点是Java的强制转换行为,特别是当从
char
隐式强制转换为
int
时。也许你想在回答中更详细地讨论这个话题?@chrylis是的,b但是你想混淆OP吗